首页 > 解决方案 > 当键盘从自己的 TextField 切换到另一个 TextField 时,SearchBar RightButton“取消”禁用

问题描述

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

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

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

编辑
添加屏幕截图以澄清这种情况。显示实际屏幕的屏幕截图

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

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

我正在使用searchBarCancelButtonClicked(_ searchBar: UISearchBar)从导航标题视图中删除搜索栏。当我添加它时,如果搜索栏不是第一响应者(我猜),默认的关闭按钮行为将变灰(而不是直接可点击),而我希望它始终处于启用状态(这就是我对代码进行优化的原因上面的片段)。
我用这个问题来帮助我实现我想要
的当键盘被关闭时,如何保持搜索栏中的取消按钮处于启用状态?
我添加并检查了searchBarTextDidEndEditing(_ searchBar: UISearchBar),searchBarShouldEndEditing(_ searchBar: UISearchBar)和 overridden resignFirstResponder(),后者是唯一没有被调用的。仍然关闭按钮变为禁用直接从搜索字段切换到文本字段。

标签: iosswift

解决方案


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


推荐阅读