質問

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

テキストフィールドがヒットしたとき、私はそれを伝えます -resignFirstResponder の中に -textFieldShouldReturn:. 。別のケースでは、編集を終了させるように強制したいので、テーブル全体のビューに -endEditing:YES. 。その後、テキストフィールドへのローカル参照をリリースし、行をリロードして他の何かに置き換えます。

どちらの場合もキーボードは消えません。何が悪いのかわかりません。さらにデバッグする方法がわかりません。私が行った他のテキスト編集で粘着性のキーボードの問題は一度もありませんでした。ファーストゥエスダーの辞任は常に予想通りに振る舞っています。

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

役に立ちましたか?

解決

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

(参照も参照 iPadでキーボードを却下します)

他のヒント

Appleドキュメント この例外を説明してください:

iPadでは、View Controllerが「フォームシート」スタイルを使用してビューをモダリーに表示する場合、キーボードは、ユーザーがDismissキーまたはModal Viewコントローラーがプログラム的に却下されるまで、表示されるまで隠されません。この動作の目的は、ユーザーがテキストフィールドではあるが、完全ではないビュー間を移動するため、過度のアニメーションを避けることです。

ここに適用されます(iPadのモーダルフォームシート)。この場合、キーボードを却下することは明らかに不可能です。素晴らしい。 :

AutablesAutomaticKeyBoardDismissのオーバーライドはiOS6で動作していないため、各テキストフィールドの「Ext On Ext」イベントをメソッドに接続し、次のようにキーボードを却下する必要がありました。

- (IBAction)doneEditing:(id)sender {

[sender endEditing:YES];

}

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

しかし...私は単にこの問題を単に解決することができました 無効化 画面上のuitextfields。

私の解決策について説明します ここ.

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

これが発生するユニークな状況を見つけました。却下されたとき、キーボードを画面上に残すと考えています。私はすべてをチェックしました、私のUitextFieldsの代表者は私の見解などに接続されていました。ビューウィルディズアピール()でキーボードを手動で却下しようとすると、フィールド上のderignfirstresponder()またはビューで終了()によっても機能しません。

それから、それがデリゲートメソッド自体の私のフィールド検証コードであることに気付きました。フィールドで編集が終了するたびに、テキストがこのように合理的であることを確認するために、テキストフィールドのDelegateメソッドのテキストを検証します。

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

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

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

SwiftでUitextfieldにデリゲートを与え、TextFieldShouldReturn()を生成します。たとえば、以下を参照してください -

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

終わり!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top