与这个问题类似,我有一个 UITableViewCell 的自定义子类,它有一个 UITextField。当用户触摸不同的表格视图单元格或表格外的东西时,它的工作正常,除了键盘不会消失。我试图找出最好的位置来找出何时触摸单元格外的东西,然后我可以在文本字段上调用 resignFirstResponder 。
如果 UITableViewCell 可以接收其视图之外的触摸事件,那么它可以自己 resignFirstResponder ,但我看不到任何方法可以在单元格中获取这些事件。
编辑:我在我的 UITableViewCell 子类中尝试了这个(如下),但它不起作用,我认为是因为 touchesBegan:withEvent: 如果事件由控件处理,则不会被调用。我认为我需要在事件以某种方式发送到响应者链之前捕获这些事件。
我正在考虑的解决方案是向视图控制器添加一个 touchesBegan:withEvent: 方法。在那里,我可以向所有可见的 tableview 单元格发送 resignFirstResponder ,除了触摸所在的单元格(让它获取触摸事件并自行处理)。
也许像这样的伪代码:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint touchPoint = // TBD - may need translate to cell's coordinates
for (UITableViewCell* aCell in [theTableView visibleCells]) {
if (![aCell pointInside:touchPoint withEvent:event]) {
[aCell resignFirstResponder];
}
}
}
我不确定这是否是解决此问题的最佳方法。tableviewcell 本身似乎没有任何方法可以接收其视图之外的事件的事件通知。
EDIT2:我以为我有一个答案(我什至将它作为答案发布)使用 hitTest:withEvent: 但这没有成功。它并不总是被调用。:-(