没有看到 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】:我会观察您的scrollView
的contentOffset
属性的变化。了解scrollView
的bounds
和contentOffset
以及textField
的frame
后,您可以确定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