当UITextField位于TableView单元格内时,如何隐藏键盘

时间:2012-10-27 23:27:54

标签: iphone uitableview uitextfield

我得到的是一个使用Prototype Cells的TableView和一个提供dataSource的数组 - 根据数据源,我使用某个Table View Cell标识符来构建单元格。 (如果我在这里做错了,请纠正我 - 我是iOS开发人员的新手,我正在寻找最佳实践:)

无论如何,我在Storyboard中创建的一个表视图单元格有一个UITextField。我在Storyboard GUI中设置了返回键设置为'完成'并且'自动启用返回键'被选中。然后我进入我的控制器并使用以下代码:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
    [textField resignFirstResponder];
    NSLog(@"finished change...");
}

我还有一个链接到我的控制器的'Editing Did End'事件,该事件被编码为输出到NSLog。

当我点击Return或Done时,Log输出textFieldDidEndEditing中的文本和我的事件函数。但是,当我选择一个表格单元格,或者开始移动滑块时没有任何反应 - 这意味着键盘仍然在屏幕上。

有没有办法解决这个问题?

此外,虽然我一直在研究这种原型细胞,但它似乎对我需要的东西相当费力。基本上我只需要一个基本表来允许用户编辑一些设置,所以会有:

可以编辑的2个文本字段, 1个滑块, 2个开关

我将所有这些放在一个静态UITableView中,但它没有出现 - 这是由于这种类型的表需要一个UITableViewController的限制。有没有解决的办法?

很抱歉很长的帖子 - 我仍然围绕iOS开发,但到目前为止我很享受:)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

我通常会留下一个伊瓦尔来跟踪。它让我可以根据各种事件方便地关闭键盘:

@interface ViewController () {
   UITextField *_textFieldBeingEdited;
} 
@end

- (void)textFieldDidBeginEditing:(UITextField *)textField {
   _textFieldBeingEdited = textField;
}

- (void)textFieldDidEndEditing:(UITextField *)textField{
   // no need to resignFirstResponder here.
   _textFieldBeingEdited = nil;
}

- (void)tableView:(UITableView *)tableView 
          didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   if (_textFieldBeingEdited) {
     [_textFieldBeingEdited resignFirstResponder];
   }
   ...
}