web-dev-qa-db-ja.com

キーボードを自動的にロードするにはどうすればよいですか(iOS SDK)?

本当に簡単な質問:

2つのテキストフィールドで構成されるビューを取得しました。ビューが読み込まれたときに、キーボードが自動的にポップアップして最初のフィールドにフォーカスするようにします。

それ、どうやったら出来るの? (コード内?IB内?)

どうもありがとう!わさび

24
pkluz

あなたのviewDidAppear:メソッド呼び出し[yourTextField becomeFirstResponder]

64
Mark Granoff

[myTextField becomeFirstResponder]トリックを行う必要があります。

また、ファーストレスポンダーを非表示にできるUITextFieldDelegateメソッドを実装していることを確認してください。

7
Devraj

MarkGranoffの回答の明確化として;

[yourTextField becomeFirstResponder] inside viewDidLoadまたはviewWillAppear-1〜2秒待たずにキーボードが表示されます(これは、becomeFirstResponder呼び出しをviewDidAppearメソッド内に置いた場合に発生します)。

2
N V

まあ、私はこの質問がすでに何度も答えられていることを知っています。 viewDidAppearメソッドが呼び出された後、キーボードの表示に時間がかかります。

viewDidAppearが、もちろん消えた後、ビューのライフサイクルで呼び出される最後のメソッドである理由。また、メモリ内にキーボードが見つからなかった場合は、キーボードも作成する必要があります。だから、初めて思ったより時間がかかります。これらの理由により、少し遅延が発生しました。

キーボードの表示時間を短縮するために、常にbecomeFirstResponderメソッドでviewWillAppearメソッドを呼び出しますが、スムーズなアニメーションを失わないように、viewDidAppearメソッドの直後にキーボードを表示する必要がありました。

だから、この小さなトリックは、魅力のような作品を思いつきました。シミュレータとデバイスの両方でテストしました。あなたのケースでそれが正しく機能しない場合は、他の選択肢はありませんが、受け入れられた回答で説明されているように機能させることができます。

さて、私がやっていることは、UITextField(キーボードと対話する任意のビューを使用できます)を作成し、becomeを呼び出して、キーボードがまだ作成されていない場合は、ファーストレスポンダーメソッドを呼び出してメモリに配置することです。したがって、2回目は、キーボードをキャッシュに入れて、キーボードの表示時間を短縮します。さて、私はこれらのコードを、後でキーボードを表示する前のビューコントローラーに配置しました。

コードは次のとおりです。

- (void)viewDidAppear:(BOOL)animated
{
    UITextField *textField = [[UITextField alloc]init];
    [self.view addSubview:textField];
    [textField becomeFirstResponder];
    [textField resignFirstResponder];
    [textField removeFromSuperview];
}
2
limon