我有一个这样的模态设置:
尽管有外观,但前两个字段是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];
}
}
日志记录确认这些被调用。但键盘并没有隐藏。当视图滑出时,它只会保持原位。返回时,前一个字段仍然具有焦点(并且键盘已经关闭)。
有什么想法吗?
答案 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