选中表格单元格后删除键盘

时间:2012-01-14 23:22:19

标签: ios uiviewcontroller uiscrollview uitextfield resignfirstresponder

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

enter image description here

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

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

enter image description here

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

}

日志记录确认这些被调用。但键盘并没有隐藏。当视图滑出时,它只会保持原位。返回时,前一个字段仍然具有焦点(并且键盘已经关闭)。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

resignFrstResponder在您使用模态视图时不会关闭键盘。

另一位开发人员在此处找到了此行为的解决方法:http://viraj-workstuff.blogspot.com/2010/12/resignfirstresponder-does-not-hide.html

答案 1 :(得分: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
}

答案 2 :(得分:0)

两件事: 您是否正在使用segue推送其他VC?如果是这样,请在prepareForSegue方法中重新设置键盘。

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