【发布时间】:2015-08-25 13:32:13
【问题描述】:
在我正在开发的应用程序中,我在滚动视图中有两个视图控制器。第二个视图控制器 (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
}
}
【问题讨论】:
-
想一想和方法并不难,您希望键盘何时关闭?它应该在什么时候解散?
-
我的滚动视图有
pagingEnabled = true。当滚动视图从包含 VC 2 的页面捕捉到包含 VC 1 的页面时,我希望键盘消失。我应该补充说我计划添加一个 VC 3,所以我正在寻找一种可行的方法与视图控制器的数量无关。 -
“当滚动视图从包含 VC 2 的页面捕捉到包含 VC 1 的页面时,我希望键盘消失” - 这就是你的答案 - 使用滚动视图委托方法,你的方法将是检测滚动视图何时停止移动并且当前未显示 VC2 以关闭键盘(以及关于如何执行此操作的大量示例)。
-
谢谢,我做到了,它成功了
标签: ios uiviewcontroller uiscrollview first-responder