我得到的是一个使用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开发,但到目前为止我很享受:)
非常感谢任何帮助。
答案 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];
}
...
}