今日、自分のコードを 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つの問題があります。
- キーボードは、「完了」ボタンがタップされたときのみ非表示になります。テキスト フィールド以外の領域をタップしても非表示になりません。iOS の世界ではこれが普通かどうかはわかりませんが、通常、多くのアプリはこのように動作しません。
- このプロセスをループして、すべてのテキスト フィールドにデリゲートを 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];
}