我遇到了一个我无法解决的奇怪问题。
我在TableView中的TableViewCell中有一个文本字段。当我点击单元格时,会出现一个键盘。我有以下代码来解雇所说的键盘:
-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
[self findAndResignFirstResonder:self.view];
}
问题是,当TextField位于键盘顶部的下方时,TableView会滚动显示它。这反过来会触发scrollViewDidScroll方法,然后解除键盘。
答案 0 :(得分:2)
有道理 - 每次滚动tableview时,委托方法scrollViewDidScroll:
都会被称为。因此,如果您的scrollViewDidScroll:
取消键盘,那么当应用程序自动调整(滚动)tableview内容偏移以考虑键盘时,它会自行解散。
您将要以不同的方式实现键盘解除。对于一个解决方案,请将您的UITableViewController设为UITextFieldDelegate
。然后,实施textFieldShouldReturn:
,您可以在其中调用[textField resignFirstResponder]
或[self.view endEditing:YES]
(有关详细信息,请参阅Managing the Keyboard (Apple))。
我想你正在寻找的效果是,如果用户触摸UITextField或键盘之外的任何地方,键盘将被解除。为此,我会考虑实施touchesBegan:
(如Techotopia中所述)或UITapGestureRecognizer
(如this post中所述),请务必加入gestureRecognizer.cancelsTouchesInView = NO;
因为它表明在页面中稍微向下)。