3

登録フォームがあり、キーボードを常に上に置きたいです。私が今やっているのは、ユーザーがビューコントローラー間を移動すると、viewDidLoadで、最初のUITextFieldが最初のレスポンダーになるということです。問題は、ユーザーがView Controller間を移動すると、キーボードがちらつく(消えてから再び現れる)ことです。

また、これに関連して:私はいくつかのuitextfieldsを持つフォームを持っています。ユーザーがnextを押すと、becomefirstresponderを使用して次のuitextfieldに移動します。ユーザーが最後のテキストフィールドにいるとき、キーボードボタンは「完了」になります。次に、ユーザーがそれを押すと、最後のフィールドにエラーがある場合、フォーカスを取得する必要があります(becomeFirstResponderを呼び出します)が、それは発生しません(フォーカスが取得されず、キーボードがダウンします)。他のすべてのフィールドはフォーカスをうまく取得しますが、この最後のフィールドはそうではありません。他のテキストフィールドに切り替えて元に戻すなど、すべてを試しました。問題は、行われるとキーボードが自動的に削除されることです。

4

1 に答える 1

3

これについては、2つの別々の質問をする必要があります。

まず、ちらつき:

UINavigationControllerを使用していると思います。UINavigationControllerのどこかに非表示のUITextFieldを追加できます。これは、新しいViewControllerに切り替える前にフォーカスを与えます。次に、新しいViewControllerが表示されたら(viewDidAppear)、必要に応じて最初のtextFieldにフォーカスを設定します。

ただし、全体的なアプローチは一種のハッキーであり、使用することはお勧めしません。代わりに、scrollViewで複数のビューを使用してみてください。これらのビューのうち、新しいビューに移動するときにオフセットを変更します。これにより、ちらつきも解消されます。

次に、DoneでfirstResponderステータスを失います。

完了ボタンは、それが言っていることを正確に示すために特にあります。終わり。これを押すと、ユーザーが終了し、入力するテキストが残っていないことを前提としているため、キーボードが閉じられます。

本当に[完了]ボタンを保持したい場合は、次のことを試してください。

  1. ユーザーがキーボードを閉じることができるようにします。
  2. 却下したら、最後のフィールドでエラーを確認します。
  3. エラーが発生した場合は、を呼び出す代わりに[lastField becomeFirstResponder]、を試してください[self performSelector:@selector(thisSelectorWillCallFirstResponder) withObject:nil afterDelay:1.0]
  4. メソッドthisSelectorWillCallFirstResponder呼び出しで[lastField becomeFirstResponder]

これにより、キーボードが再びポップアップする前に、キーボードが消える時間が与えられるため、becomeFirstResponder通話の邪魔になりません。

もう1つの方法は、[完了]ボタンを使用せず、代わりにリターンキーを使用することです。デリゲートメソッドを使用すると、いつでもリターンをインターセプトできますtextFieldShouldReturn:。そこで、textFieldのフォーカスを失うことなく、エラーチェックを処理できます。

于 2012-11-16T10:36:21.370 に答える