出现UIKeyboard会触发滚动事件,然后解除键盘

时间:2015-01-02 18:25:38

标签: ios objective-c uitableview uiscrollview uikeyboard

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

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

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

问题是,当TextField位于键盘顶部的下方时,TableView会滚动显示它。这反过来会触发scrollViewDidScroll方法,然后解除键盘。

1 个答案:

答案 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;因为它表明在页面中稍微向下)。