質問

私はこのようなモーダルセットアップを持っています:

enter image description here

外観にもかかわらず、最初の2つのフィールドは、最初のレスポンダーになり、キーボードを表示するuitextfieldsです。 3番目の「部門」アイテムはテーブルビューで、別のビューを押します。

いずれかのフィールドが編集されている間に、ユーザーがスクロールして部門セルに到達できるように、スクロールビューを実装しました。

enter image description here

プッシュの前に選択されたら、キーボードを隠したいと思います。それは小さな詳細ですが、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
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top