0

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

ここに画像の説明を入力してください

外観にもかかわらず、最初の2つのフィールドはUITextFieldsであり、ファーストレスポンダーになり、キーボードを表示します。3番目の「Department」アイテムはテーブルビューであり、別のビューをプッシュします。

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

ここに画像の説明を入力してください

選択した場合、プッシュする前にキーボードを非表示にします。細かい部分ですが、Appleの「カレンダー」アプリに新しいイベントを追加してみてください。ファーストレスポンダーとして最初のテキストフィールドで開きます(したがって、キーボードが存在します)。開始/終了セルを選択すると、次のビューが押されるときにキーボードが非表示になります。

どうすればこれを達成できますか?テストとして私は試しました:

- (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];
}

}

ロギングは、これらが呼び出されていることを確認します。しかし、キーボードは隠れません。ビューがスライドするとき、それは単にその場にとどまります。そして戻ったとき、前のフィールドにはまだフォーカスがあります(そしてキーボードは外れています)。

何か案は?

4

3 に答える 3

1

resignFrstResponderモーダルビューを使用しているときにキーボードを閉じることはありません。

別の開発者は、この動作の回避策をここで見つけました:http: //viraj-workstuff.blogspot.com/2010/12/resignfirstresponder-does-not-hide.html

于 2012-01-14T23:45:15.150 に答える
1

それほどエレガントではありませんが、アドホックで目に見えないファーストレスポンダーのステータスを盗んでみてください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
}
于 2012-01-14T23:49:22.057 に答える
0

2つのこと:他のVCをプッシュするためにセグエを使用していますか?その場合は、prepareForSegueメソッドでキーボードを辞任します。

そうでない場合は、didSelectRowAtIndexPathの代わりにwillSelectRowForIndexPathを使用してみてください

于 2012-01-14T23:44:21.793 に答える