UIKeyboard 出现触发滚动事件,然后关闭键盘

UIKeyboard appearing triggers a scroll event that then dismisses the keyboard

我遇到了一个一直无法解决的奇怪问题。

我在 TableView 的 TableViewCell 中有一个文本字段。当我点击单元格时,会出现一个键盘。我有以下代码来关闭所述键盘:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
    [self findAndResignFirstResonder:self.view];
}

问题是,当 TextField 低于键盘顶部的位置时,TableView 会滚动以使其可见。这反过来会触发 scrollViewDidScroll 方法,然后关闭键盘。

有道理——每次滚动表格视图时,都会调用委托方法scrollViewDidScroll:。因此,如果您的 scrollViewDidScroll: 关闭键盘,那么当应用程序自动调整(滚动)tableview 内容偏移以说明键盘时,它会自行关闭。

您将希望以不同方式实现键盘关闭。对于一种解决方案,将您的 UITableViewController 设为 UITextFieldDelegate。然后,实现 textFieldShouldReturn:,您可以在其中调用 [textField resignFirstResponder][self.view endEditing:YES](有关详细信息,请参阅 Managing the Keyboard (Apple))。

我想您正在寻找的效果是,如果用户触摸 UITextField 或键盘之外的任何地方,键盘将被关闭。为此,我将着眼于实现 touchesBegan:(如 Techotopia) or with a UITapGestureRecognizer(as described in this post 中所述,请务必包含 gestureRecognizer.cancelsTouchesInView = NO;,因为它建议在页面更下方一点)。