【问题标题】:UISearchBar ends editing, hides keyboard, but screen is still dimmedUISearchBar 结束编辑,隐藏键盘,但屏幕仍然变暗
【发布时间】:2019-07-04 19:09:22
【问题描述】:

我有一个视图控制器,我在其中动态创建一个 UISearchController 并将其分配给self.navigationItem.searchController

class MyViewController: UIViewController, UISearchBarDelegate {
    let searchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.searchController = searchController
        searchController.searchBar.delegate = self

        // launch the app directly into this search text box
        searchController.searchBar.becomeFirstResponder()
    }

    func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
       // I tried this
       searchBar.resignFirstResponder()
       // and this
       searchBar.endEditing(true)
       // and finally this
       return true
   }

}

当用户触摸搜索栏外的任何位置并且屏幕恢复亮度时,键盘会隐藏起来。这是预期的行为。

但是,当用户点击屏幕键盘中的 [搜索] 按钮时,键盘会消失,但屏幕会保持暗淡。没有一个子视图可用,除非用户再次点击搜索栏,然后键盘又回来了。

简而言之,用户继续使用视图控制器的唯一方法是不要点击 [search] 按钮,这是违反直觉的。

我错过了什么吗?

【问题讨论】:

  • 看看searchController.obscuresBackgroundDuringPresentation = false是否有帮助。
  • @Don 做到了!谢谢。如果您将此作为答案发布,我将投票并接受

标签: ios swift uisearchbar uisearchbardelegate


【解决方案1】:

在 viewDidLoad() 中,添加以下行:

searchController.obscuresBackgroundDuringPresentation = false

来自文档:如果您使用同一个视图控制器来显示可搜索的内容和搜索结果,建议您将此属性设置为 false。此属性的默认值为 true。

【讨论】:

  • 这并不能完全解决问题。这会在搜索控制器处于活动状态时完全禁用深色背景,这可能不是您想要的。我会查看 UISearchController 的 active 属性。
  • 感谢@rmaddy,在searchBarShouldEndEditing 中设置isActive = false 修复了问题并显示导航栏后退箭头
猜你喜欢
  • 2012-03-18
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2015-04-13
  • 1970-01-01
相关资源
最近更新 更多