在我正在处理的应用程序中,我在滚动视图中有两个视图控制器。第二个视图控制器(VC2)包含文本视图。您可以在下面的图片中看到设置:
!
当我从VC2滚动到VC1时,键盘会持续存在并覆盖VC1的内容。我设法通过使滚动视图成为scrollViewDidScroll事件的第一个响应者来解决问题。这是有效的,但是即使在部分滚动上也会导致键盘消失,这对用户来说可能很烦人。我也可以通过检查内容偏移来解决这个问题,但它让我觉得过于复杂而且根本不优雅。有更好的方法吗?
编辑:
正如Chonch和latenitecoder建议的那样,我检测到了页面更改。我将代码从Detecting UIScrollView page change调整为swift。这是:
var previousPage = 0
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
let pageWidth = scrollView.frame.size.width
let fractionalPage = scrollView.contentOffset.x / pageWidth
let page = Int(round(fractionalPage))
if (previousPage != page) {
// Page has changed, do your thing!
self.becomeFirstResponder()
// Finally, update previous page
previousPage = page
}
}
答案 0 :(得分:0)
您可以将UIScrollView的pagingEnabled属性设置为YES,并在分页结束且结果页面为VC1时仅为UITextView调用resignFirstResponder。只要当前页面仍为VC2,您就不会调用resignFirstResponder,键盘仍会显示。
但是,请注意,一旦用户开始滚动就隐藏键盘实际上是个好主意(因为您正在描述的是您当前的状态)。也许你应该这样离开它,当分页结束时,检查当前页面是否是VC2,如果是,请在UITextView上调用becomeFirstResponder以便再次显示键盘。
答案 1 :(得分:0)
我建议将UIPageViewController
用于水平滚动控制器。然后你可以在它的委托方法中执行相同的操作
- (void)pageViewController: didFinishAnimating: previousViewControllers: transitionCompleted:
但它会为你节省很多记忆。