在 UIView 上调用 endEditing

Posted

技术标签:

【中文标题】在 UIView 上调用 endEditing【英文标题】:Calling endEditing on a UIView 【发布时间】:2016-05-01 18:20:29 【问题描述】:

我有一个带有两个 UITextView 的 tableView。用户可以通过点击“+”按钮添加任意数量的单元格。 tableView 从一行(单元格)开始。假设用户向两个 textViews 添加了一些信息,然后点击加号按钮并滚动到它。当用户滚动时,我调用此函数来关闭键盘,以免妨碍键盘:

override func scrollViewDidScroll(scrollView: UIScrollView) 

    self.view.endEditing(true)


现在,键盘消失了,用户开始点击第二行的文本字段。 tableView 跳起来(我想是为了容纳键盘),但是 textField 不能编辑(没有光标和键盘不出现)。如果我回到第一行(第 0 行),键盘会出现,我可以编辑 textView。 为什么会这样?

【问题讨论】:

如果为第一个 textView 调用 resignFirstResponder 会发生什么? 【参考方案1】:

scrollView 子类上有一个属性(例如 TableViews)

tableView.keyboardDismissMode = .OnDrag

一旦用户开始向下拖动,它就会关闭键盘

【讨论】:

我现在在 viewDidLoad 中调用该代码时注意到一个错误。我得到 ~~ -[UIWindow endDisablingInterfaceAutorotationAnimated:] 调用 > 不匹配 -beginDisablingInterfaceAutorotation。无视。 ~~我在网上查了这个,没有一个解决方案能解决这个错误。有什么想法吗? 不知道!但是,如果您使用情节提要,则可以在属性检查器 ScrollView -> 键盘中进行设置。【参考方案2】:

scrollViewDidScroll 每次 tableview 移动时都会调用,所以当“tableView 跳起来(我认为是为了适应键盘)”时,它也会调用并关闭键盘。您应该在那里添加一些限制或将 endEditing 代码放在其他地方。

【讨论】:

以上是关于在 UIView 上调用 endEditing的主要内容,如果未能解决你的问题,请参考以下文章

drawRect 在 UIView 子类上被调用,但不在 UIViewController 上

如果 UIView 动画在单元格上运行,则不会调用 CollectionView didSelectItemAtIndexPath

使用 loadNibNamed 加载视图时,如何在 UIView 上调用便利初始化程序?

什么时候在 UIView 或 UIViewController 上调用“required init?(coder aDecoder: NSCoder)”?

在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画

UIView animate withDuration 不会在 iOS 9.3.5 上调用完成处理程序