ユーザーがテキストフィールド以外の領域をタップしたときにキーボードを閉じるにはどうすればいいですか? 質問する

ユーザーがテキストフィールド以外の領域をタップしたときにキーボードを閉じるにはどうすればいいですか? 質問する

今日、自分のコードを iPod (iOS 6.1.3) で実行しようとしたところ、興味深いものを見つけました...

まず、テキストフィールドをタップするとキーボードが表示されますが、テキストフィールド以外の場所をタップしてもキーボードは非表示になりません。

そこで私はグーグルで検索してこの解決策を見つけました:

_fieldEmail.delegate = self;
_fieldEmail.returnKeyType = UIReturnKeyDone;

_fieldPassword.delegate = self;
_fieldPassword.returnKeyType = UIReturnKeyDone;

_fieldRegisterName.delegate = self;
_fieldRegisterName.returnKeyType = UIReturnKeyDone;

_fieldRegisterEmail.delegate = self;
_fieldRegisterEmail.returnKeyType = UIReturnKeyDone;

_fieldRegisterPassword.delegate = self;
_fieldRegisterPassword.returnKeyType = UIReturnKeyDone;

動作します...キーボードの下部に「完了」ボタンが表示され、それを押すとキーボードを非表示にできるようになりました。

しかし、ここで2つの問題があります。

  1. キーボードは、「完了」ボタンがタップされたときのみ非表示になります。テキスト フィールド以外の領域をタップしても非表示になりません。iOS の世界ではこれが普通かどうかはわかりませんが、通常、多くのアプリはこのように動作しません。
  2. このプロセスをループして、すべてのテキスト フィールドにデリゲートを 1 つずつ手動で追加しなくても済むようにする方法はありますか? どうすればできますか?

それが私が知りたいことのすべてです

ベストアンサー1

以下のコードは、UIView内のすべてのコンポーネントで機能します。UITextField

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UIView * txt in self.view.subviews){
        if ([txt isKindOfClass:[UITextField class]] && [txt isFirstResponder]) {
            [txt resignFirstResponder];
        }
    }
}

または

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];    
}

おすすめ記事