2011-12-04 11 views
15

私はモーダルフォームシート(iPad)でテーブルビューを持っていて、セルの1つにUITextFieldが含まれています。私のビューコントローラは、テキストフィールドへの参照を保持し、その代理人です。UITextFieldのキーボードは閉じません。いいえ、実際には

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

いずれの場合もキーボードは消えません。私は何が間違っているのか分からず、さらにデバッグする方法がわからない。私がやった他のテキスト編集ではキーボードの問題が一度も起こりませんでした。firstResponderの辞退はいつも期待通りに動いています。

どのような考えですか?ありがとう。

+0

コードは実行されていますか?あなたは正しいテキストフィールドでresignFirstResponderを呼び出しますか? – Eiko

+0

うん。私は 'isFirstResponder'がtextFieldでYESであることを保証しました。私はそれを呼び出す直前に' -resignFirstResponder'を呼び出しました。 –

答えて

11

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

は(も参照してくださいDismiss keyboard on IPAD

+0

はい!最後に私のためにこれを解決しました。テキストフィールドを含むビューコントローラを表示するビューコントローラでこれを設定することを忘れないでください。 –

21

アップルのドキュメントdescribe this exception:iPadで

、ビューコントローラのモーダルが 「帳票」スタイル、キーボード、一度示すを使用して、そのビューを提示した場合、 ユーザータップするまで隠されていません解読キーまたはモーダルビューコントローラは、 です。この動作の目的は、多くの場合 であるが、テキストフィールド全体ではないビュー間をユーザーが移動するときに、 過度のアニメーションを避けることです。

ここで(iPadのモーダルフォームシート)適用されます。明らかに、この場合はキーボードを閉じることができません。スーパー。 :\

+1

+1:私はこれを理解しようとしている時間のために私の髪を引き出した後、この答えを見つけました。答えは、リンゴはこの愚かな実装を目的でしたか?あなたはアップルを冗談にしなければならない。 –

+9

'disablesAutomaticKeyboardDismissal'メソッドをオーバーライドし、モーダルで表示されているビューコントローラに対してNOを返すことができます。これは、キーボードが消されるのを防ぐデフォルトの動作を回避します。 – gdavis

+1

残念ながら、disablesAutomaticKeyboardDismissal修正がiOS 6で動作しなくなったようです。同じものを見ている人は誰ですか? – Snips

1

disablesAutomaticKeyboardDismissalオーバーライドがiOS6に取り組んでいないので、私はそうのように、各テキストフィールドのメソッドにイベント「終了に終了しました」とし、そこにキーボードを消すに接続する必要がありました:

- (IBAction)doneEditing:(id)sender { 

[sender endEditing:YES]; 

}

0

disablesAutomaticKeyboardDismissal

iOSの7の上に私のために働くことを拒否した。しかし...私は単に画面上UITextFieldsを無効にすることで、この問題を解決するために管理しました。

私の解答はhereと記載されています。

これはModal UIViewControllerでも機能します。

0

これが発生する固有の状況が見つかりました。私は、解雇されたときに画面上にキーボードを残すという見解を持っています。私はすべてをチェックし、私のUITextFieldsデリゲートは私のビューなどに接続されていました。viewWillDisappear()でキーボードを手動で解除しようとすると、フィールドのresignFirstResponder()またはビューのendEditing()のどちらでも動作しません。

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

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

だから、ユーザーが任意のテキストを入力せずに前のビューに戻ったとき、検証が失敗し、テキストフィールドには、それがファーストレスポンダの状態だ放棄することは許されない、と彼らは、前に戻って、キーボードが画面に残っていますビュー。

これは異常な状況ですが、うまくいけば、これは誰かに援助を与えるのに役立ちます。迅速で

+1

または単に 'return self.validateField(textField)' – Alnitak

0

は自分のUITextFieldにデリゲートを与えるとtextFieldShouldReturn()は、例えば以下を参照してください生成 -

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

をやりました!

関連する問題