0

我有一个这样的模式设置:

在此处输入图像描述

尽管看起来,前两个字段是 UITextFields,它们成为第一响应者并显示键盘。第三个“部门”项目是一个表格视图并推送另一个视图。

我已经实现了一个滚动视图,以便在编辑任一字段时,用户可以滚动并到达部门单元格:

在此处输入图像描述

当它被选中时,在推送之前,我想隐藏键盘。这是一个小细节,但请尝试在 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

两件事:你是否使用 segue 来推动其他 VC?如果是这样,请在 prepareForSegue 方法中退出键盘。

如果没有,请尝试使用 willSelectRowForIndexPath 而不是 didSelectRowAtIndexPath

于 2012-01-14T23:44:21.793 回答