16

モーダルフォームシート(iPad)のテーブルビューがあり、セルの1つにUITextFieldが含まれています。私のビューコントローラはテキストフィールドへの参照を保持しており、そのデリゲートでもあります。

テキストフィールドがReturnキーを押すと、。-resignFirstResponderの内側にそれを伝えます-textFieldShouldReturn:。別のケースでは、強制的に編集を終了したいので、テーブルビュー全体をに指示します-endEditing:YES。その後、テキストフィールドへのローカル参照を解放し、行をリロードして別のものに置き換えます。

どちらの場合もキーボードは消えません。何が問題なのかわかりません。さらにデバッグする方法もわかりません。私が行った他のテキスト編集でキーボードのスティッキーな問題が発生したことは一度もありません。firstResponderの辞任は常に期待どおりに動作していました。

何かご意見は?ありがとう。

4

6 に答える 6

21

Appleドキュメントはこの例外について説明しています

iPadでは、ビューコントローラが「フォームシート」スタイルを使用してビューをモーダルに表示する場合、表示されたキーボードは、ユーザーが閉じるキーをタップするか、モーダルビューコントローラがプログラムで閉じられるまで非表示になりません。この動作の目的は、ユーザーがテキストフィールドであるが完全ではないビュー間を移動するときに、過度のアニメーションを回避することです。

これはたまたまここに当てはまります(iPadのモーダルフォームシート)。この場合、キーボードを閉じることは明らかに不可能です。素晴らしい。:\

于 2011-12-04T23:41:43.900 に答える
11

実装-disablesAutomaticKeyboardDismissalしてNOを返します。iOS 6でも動作しますが、適切なコントローラーに実装する必要があります。テキストフィールドを持つ子コントローラーを備えたモーダルフォームシートナビゲーションコントローラーがある場合、子ではなく、メソッドの実装が必要なのはナビゲーションコントローラーです。

IPADのキーボードを閉じるも参照してください)

于 2013-04-11T18:15:31.587 に答える
1

disablesAutomaticKeyboardDismissalオーバーライドはiOS6で機能しないため、各テキストフィールドの「DidEnd On Exit」イベントをメソッドに接続してから、次のようにキーボードを閉じる必要がありました。

- (IBAction)doneEditing:(id)sender {

[sender endEditing:YES];

}

于 2012-10-18T20:08:40.030 に答える
0

disablesAutomaticKeyboardDismissaliOS7で私のために働くことを拒否しました。

しかし...画面上のUITextFieldsを無効にするだけで、この問題を解決することができました。

私の解決策はここで説明されています。

これはモーダルでも機能しUIViewControllerます。

于 2014-04-22T13:42:48.973 に答える
0

私はこれが発生する独特の状況を見つけました。却下すると、キーボードが画面に表示されたままになるという見方があります。すべてをチェックし、UITextFieldsデリゲートがビューに接続されているなど。viewWillDisappear()でキーボードを手動で閉じようとしても、フィールドでresignFirstResponder()を実行するか、ビューでendEditing()を実行しても機能しません。

次に、それがデリゲートメソッド自体のフィールド検証コードであることに気付きました。フィールドで編集が終了するたびに、textFieldShouldEndEditingデリゲートメソッドのテキストを検証して、このようにテキストが妥当であることを確認し、検証されるまでフィールドからタブアウトできないようにします。

  func textFieldShouldEndEditing(textField: UITextField) -> Bool
    {
        if self.validateField(textField) {
           return true
        } else {
          return false
        }
   }

したがって、ユーザーがテキストを入力せずに前のビューに戻った場合、検証は失敗し、テキストフィールドは最初のレスポンダーのステータスを放棄できず、キーボードは前のビューに戻っても画面に表示されたままになります。

これは珍しい状況ですが、うまくいけば、これはそれに遭遇した他の誰かを助けるでしょう。

于 2016-05-06T23:39:20.703 に答える
0

迅速にUITextFieldにデリゲートを与え、textFieldShouldReturn()を生成します。たとえば以下を参照してください-

class ViewController: UIViewController, UITextFieldDelegate {
    func settingUpTextField() {
        textField.delegate = self;
        return;
    }
    ...
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder();
        return true;
    }
}

終わり!

于 2017-12-26T05:54:44.720 に答える