【问题标题】:UISearchController setActive does nothingUISearchController setActive 什么都不做
【发布时间】:2021-12-05 02:24:23
【问题描述】:

我试图通过设置其isActive 属性来呈现一个搜索控制器以响应按钮,但它没有出现。

lazy var searchController: UISeachController = {
    let searchController = UISearchController(searchResultsController: nil)
    searchController.delegate = self
    return searchController
}()

override func viewDidLoad() {
    super.viewDidLoad()
    definesPresentationContext = true
}

// Called when a button on the navbar is tapped
@obcj private func searchTapped() {
    // The doc says you can force the search controller to appear by setting isActive,
    // but nothing happens
    searchController.isActive = true

    // Calling present does show it, but the search bar appears behind the navbar. 
    // And the delegate methods are still not called
    //present(searchController, animated: true)
}

func willPresentSearchController(_ searchController: UISearchController) {
    // Not called, even when calling 'present'
}

【问题讨论】:

  • 您没有搜索结果控制器,也没有搜索栏,那么您期望会发生什么?
  • 搜索控制器自动配置搜索栏,搜索结果控制器是可选的。我正在使用表格视图控制器来获取结果,但这与我的问题无关。搜索控制器在显式调用 present 时正确显示,所以我认为没有任何遗漏。

标签: swift uisearchcontroller


【解决方案1】:

似乎isActive 仅在搜索栏位于视图层次结构中时才有效。

// This will place the search bar in the title view, allowing you to
// have other buttons on the right of the search bar.
navigationItem.titleView = searchController.searchBar

或者

// This takes up a whole other row under title row.
navigationItem.searchController = searchController

但是如果你走这条路,你不需要自己设置 isActive - 当用户与搜索栏交互时,搜索控制器会自动出现。我仍然不明白 isActive 应该如何使用,但它确实回答了原始问题。

【讨论】:

  • 是的,但那是我最初的观点。这里没有新消息。
  • 如果问题是,是否有 isActive 的用例,是的。
  • 好吧,对不起,我太害羞了。当我说“你没有搜索结果控制器,也没有搜索栏”时,我的意思是,“界面中没有搜索栏(可能没有搜索结果控制器),这件事毫无意义。”我试图给你一个提示。
猜你喜欢
  • 2019-03-08
  • 2016-12-24
  • 2017-04-18
  • 2011-08-03
  • 2014-05-11
  • 2014-09-10
  • 1970-01-01
  • 2023-03-29
  • 2013-09-28
相关资源
最近更新 更多