テーブルセルが選択されたらキーボードを取り外します
-
28-10-2019 - |
質問
私はこのようなモーダルセットアップを持っています:
外観にもかかわらず、最初の2つのフィールドは、最初のレスポンダーになり、キーボードを表示するuitextfieldsです。 3番目の「部門」アイテムはテーブルビューで、別のビューを押します。
いずれかのフィールドが編集されている間に、ユーザーがスクロールして部門セルに到達できるように、スクロールビューを実装しました。
プッシュの前に選択されたら、キーボードを隠したいと思います。それは小さな詳細ですが、Appleの「カレンダー」アプリに新しいイベントを追加してみてください。最初のレスポンダーとして最初のテキストフィールドで開きます(したがって、キーボードが存在します)。 Start/Endセルを選択すると、次のビューが押されているときにキーボードが隠れています。
これを達成するにはどうすればよいですか?テストとして私は試しました:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"hiding keyboard");
if ([ingredientName isFirstResponder]) {
NSLog(@"resigning name field");
[ingredientName resignFirstResponder];
}
else if ([ingredientAmount isFirstResponder]){
NSLog(@"resigning amount field");
[ingredientAmount resignFirstResponder];
}
}
ロギングは、これらが呼び出されていることを確認します。しかし、キーボードは非表示になりません。ビューがスライドするとき、それは単に所定の位置にとどまります。また、戻ってきた後、以前のフィールドにはまだフォーカスがあります(キーボードが出ています)。
何か案は?
解決
2つのこと:他のVCをプッシュするためにセグエを使用していますか?その場合、prepareforsegueメソッドのキーボードを辞任します。
そうでない場合は、DidSeLectRowAtindexPathの代わりにWillEctrowForIndexPathを使用してみてください
他のヒント
resignFrstResponder
モーダルビューを使用している場合、キーボードは却下しません。
別の開発者は、この動作の回避策をここで見つけました。 http://viraj-workstuff.blogspot.com/2010/12/resignfirstresponder-does-not-hide.html
ひどくエレガントではありませんが、アドホックで目に見えない、ファーストゥレスサンダーのステータスを盗んでみてください UITextField
:
-(void)dismissKeyboard {
UITextField *textField;
textField=[[UITextField alloc] initWithFrame:CGRectZero];
[self.view addSubview:textField];
[textField becomeFirstResponder];
[textField resignFirstResponder];
[textField removeFromSuperview];
// [textField release] // uncomment if not using ARC
}