iOS UIScrollViewKeyboardDismissModeInteractive 禁用文本字段交互

Posted

技术标签:

【中文标题】iOS UIScrollViewKeyboardDismissModeInteractive 禁用文本字段交互【英文标题】:iOS UIScrollViewKeyboardDismissModeInteractive disables text field interaction 【发布时间】:2014-05-30 13:53:56 【问题描述】:

ios7 应用程序中,我在 UIScrollView 上有一堆 UITextFields 可以垂直滚动。 我设置了scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

现在,我可以通过拖动滚动视图来关闭键盘。我第一次以这种方式关闭键盘时,会发生一些事情: 我不能再编辑任何 UITextFields。好像他们的userInteractionEnabled 设置为NO。光标不会出现在文本字段内。键盘没有出现。

我不知道为什么我第一次以交互方式关闭键盘后,我的文本字段变得无响应。有人遇到过这个问题吗?

编辑:

如果我打电话给[self.view endEditing:YES];,我会得到一个非常奇怪的行为(附截图)。屏幕的大部分上部变为灰色。当我旋转设备时,灰色矩形移动到底部,文本字段再次响应。

【问题讨论】:

请看这个:***.com/help/how-to-ask 【参考方案1】:

原来我遇到的问题与scrollView.keyboardDismissMode无关。这与弄乱滚动视图的内容偏移和插入有很大关系。

我发现我的视图控制器已被设置为垂直滚动视图的委托。 它已经实现了一种委托方法:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView

    if (scrollView.contentOffset.y < 0) 
        [scrollView setContentOffset:CGPointMake(0, 0)];
    

这是一次糟糕的 hack 尝试,试图通过以下方式轻松完成:

self.automaticallyAdjustsScrollViewInsets = NO;

所以我删除了scrollViewDidScroll 方法,取消设置滚动视图的委托并将self.automaticallyAdjustsScrollViewInsets = NO 放在我的视图控制器的viewDidLoad 方法之上。

现在,效果很好。

【讨论】:

以上是关于iOS UIScrollViewKeyboardDismissModeInteractive 禁用文本字段交互的主要内容,如果未能解决你的问题,请参考以下文章

IO复用阻塞IO非阻塞IO同步IO异步IO

四种IO模型‘阻塞IO/非阻塞IO/信号驱动IO/异步IO‘

5种IO模型阻塞IO和非阻塞IO同步IO和异步IO

网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别