没有看到 UIScrollView 上的 UITextField 时 resignFirstResponder

Posted

技术标签:

【中文标题】没有看到 UIScrollView 上的 UITextField 时 resignFirstResponder【英文标题】:resignFirstResponder when UITextField on UIScrollView is not seen 【发布时间】:2013-02-17 14:59:51 【问题描述】:

我有一个UITextField,当我加载ViewController 时,我调用becomeFirstResponder。在它上面,我有一个UIScrollView,当我将它滚动出我的视图时,我想在textField 上调用resignFirstResponder

UITextField 的位置可能会改变,但行为应该保持不变。关于如何实现这种事情的任何想法?谢谢。

【问题讨论】:

只是为了记录,[objective-c] 标签应该真正保留用于与 Objective-C 语言使用或语法相关的问题。这个问题更侧重于 Cocoa Touch 库的使用。同样,[iphone] 标签在这里也不合适,因为它将问题标记为特定于 iPhone,并且不包括 iPad。纯粹的迂腐,我知道 :D 【参考方案1】:

我会观察您的scrollViewcontentOffset 属性的变化。了解scrollViewboundscontentOffset 以及textFieldframe 后,您可以确定textField 是否可见。像下面这样的东西应该可以工作:

CGRect scrollViewVisibleBounds = CGRectOffset(scrollView.bounds, scrollView.contentsOffset.x, scrollView.contentsOffset.y);
BOOL textFieldIsVisible = CGRectIntersectsRect(textField.frame, scrollViewVisibleBounds);

你现在遇到的问题是如何观察contentOffset的变化。持续观察(即通过 KVO)实际上并不可行,因为您将在例如减速动画期间每秒收到多个更新。我会考虑将您的viewController 设置为UIScrollViewDelegate,并通过scrollViewDidEndDragging:scrollViewDidEndDecelerating 等回调更新您的textField 的可见性。

【讨论】:

以上是关于没有看到 UIScrollView 上的 UITextField 时 resignFirstResponder的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法通过重用视图的 UIScrollView 上的核心动画来更改内容偏移?

iOS7 UIPickerView / UIScrollView

添加到 UIScrollView 时 UIButton 不滚动

UIScrollView 的内容大小上的 SizeToFit

UIScrollView里面的UIWebView上面的UIToolbar

UIScrollView 项目没有从后台移动