uitextfieldのキーボードは却下しません。いいえ、本当に
-
28-10-2019 - |
質問
モーダルフォームシート(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。
私の解決策について説明します ここ.
これはモーダルでも機能します UIViewController
s。
これが発生するユニークな状況を見つけました。却下されたとき、キーボードを画面上に残すと考えています。私はすべてをチェックしました、私の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;
}
}
終わり!