当键盘从自己的文本字段切换到另一个文本字段时,搜索栏右键“取消”被禁用

Posted

技术标签:

【中文标题】当键盘从自己的文本字段切换到另一个文本字段时,搜索栏右键“取消”被禁用【英文标题】:SearchBar RightButton "Cancel" disables when keyboard switches from self TextField to another TextField 【发布时间】:2020-04-03 19:13:48 【问题描述】:

我在这里问我的第一个问题,因为我还没有找到解决这个奇怪问题的方法。 我在导航中嵌入了一个搜索栏,并成功地设置了使用此快速代码启用的默认 取消 按钮

if let cancelButton = searchBar.value(forKey: "cancelButton") as? UIButton 
         cancelButton.isEnabled = true
    

所以当我点击周围,结束在搜索字段上的编辑时,这个按钮仍然保持活动状态。我已将此 sn-p 放入 textFieldDidEndEditing(_:) 并在视图点击时调用 endEditing。 此搜索字段用于在表格视图中搜索。表格视图中的某些单元格内部有一个文本字段。如果我点击搜索字段(并显示键盘),然后点击任何单元格中的文本字段,cancel 按钮被设置为禁用。仅在这种情况下。 我注意到的是,编辑搜索字段时显示的键盘与文本字段中显示的键盘有点不同(后者具有第一个缺少的建议视图)。 即使在这种情况下,如何防止按钮禁用?

编辑 添加屏幕截图以阐明这种情况。 Screenshot showing the actual screen

编辑 2 我不能直接在这篇文章中发布图片,所以我还要添加序列关闭按钮(在搜索栏右侧)始终启用(不是灰色且可点击)

    点击搜索栏,使键盘在屏幕上可见。键盘在字母顶部没有建议视图(实际上称为快捷方式栏,它是inputAssistantItem,在 iPhone 的搜索栏上不可用) 如果我在搜索字段之外点击,键盘会被关闭,但 关闭 按钮仍处于活动状态且可点击,立即从导航栏视图中移除搜索栏 如果我在搜索栏的键盘仍然可见时点击任何可见单元格内的任何文本字段(键盘现在在字母顶部有建议视图,所以我知道这现在是一个文本字段键盘),关闭 按钮变灰。要关闭搜索字段,用户现在必须点按两次:第一次启用它(并显示不需要的搜索字段键盘),第二次关闭搜索字段并显示导航标题

我正在使用searchBarCancelButtonClicked(_ searchBar: UISearchBar) 从导航标题视图中删除搜索栏。 当我添加它时,如果搜索栏不是第一响应者(我猜),默认的 Close 按钮行为将变灰(并且不能直接点击),而我希望它始终启用(这就是我从上面编写代码 sn-p 的原因)。 我用这个问题来帮助我实现我想要的How do you keep the cancel button in the search bar enabled when the keyboard is dismissed? 我添加并检查了searchBarTextDidEndEditing(_ searchBar: UISearchBar)searchBarShouldEndEditing(_ searchBar: UISearchBar),并覆盖了resignFirstResponder(),后者是唯一没有被调用的。仍然关闭按钮被禁用直接从搜索字段切换到文本字段。

【问题讨论】:

你好,欢迎来到 ***!理解您所描述的场景有点困难,也许尝试将您的步骤放在一个数字列表中,以便更清楚之后会发生什么?另外,您是否使用 func searchBarCancelButtonClicked(_ searchBar: UISearchBar)?如果您显示更多代码,可能会更容易理解您面临的问题。 感谢grep的回复,我加截图澄清一下 再次感谢@grep,添加您询问的信息让我想到了它。问题是文本字段成为第一响应者我添加了一个闭包以从文本字段激活搜索栏按钮,现在一切都很好 【参考方案1】:

我做了更多测试,试图测试搜索栏如何响应searchBarTextDidEndEditing(_ searchBar: UISearchBar)searchBarShouldEndEditing(_ searchBar: UISearchBar),但问题在于文本字段成为第一响应者。我知道键盘更改外观(即添加快捷方式栏)与此有关。 由于我使用的是自定义文本字段,因此我在其中添加了一个可选的闭包。该闭包在被覆盖的 becomeFirstResponder() 文本字段方法中调用,并由拥有表视图的视图控制器传递。 View Controller 将闭包设置为与上面问题中发布的相同;每当文本字段成为第一响应者时,就会调用被剪断的,确保 hte 按钮保持活动状态。

【讨论】:

以上是关于当键盘从自己的文本字段切换到另一个文本字段时,搜索栏右键“取消”被禁用的主要内容,如果未能解决你的问题,请参考以下文章

将一个文本字段移动到另一个文本字段时键盘熄灭

iOS - 当文本字段在子视图内时,键盘上的 UIScroll 弹出到文本字段

切换uitextf时停止键盘关闭

如何显示被虚拟键盘隐藏的文本字段?

检测UITextField的焦点更改

从横向切换到纵向后,将 UIScrollView 保持在正确的位置