【问题标题】:iOS11 SearchController in NavigationBar with Scope Buttons带有范围按钮的 NavigationBar 中的 iOS11 SearchController
【发布时间】:2017-11-20 10:39:54
【问题描述】:

在 iOS 11 中,您可以通过几行代码在 NavigationBar 中放置一个 UISearchController。

我在 ViewController.swift 中设置了所有内容。

func setupNavBar() {
    navigationController?.navigationBar.prefersLargeTitles = true

    let searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = wordViewController
    searchController.searchBar.scopeButtonTitles = ["French", "English"]
    searchController.searchBar.delegate = wordViewController

    navigationItem.searchController = searchController
    // Make searchbar persistent
    navigationItem.hidesSearchBarWhenScrolling = false
}

在我的委托中,搜索触发并正确过滤。但是,如果我单击任一范围按钮,它们就会消失。这个委托方法永远不会被调用。 (实际上还没有实现按范围过滤)

extension WordViewController: UISearchBarDelegate {

 func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {

    if let searchText = searchBar.text {
        print("Scoped changed: \(searchText)")
        filteredWordList = wordList.filter({$0.contains(searchText)})
    }
  }
}

完整源代码在 Github:

https://github.com/melling/ios_topics/tree/master/NavBarSearch https://github.com/melling/ios_topics/tree/master/NavBarSearch/NavBarSearch

【问题讨论】:

  • 您是否向 Apple 提交了错误报告?
  • 是的,有来源
  • 您误会了正在发生的事情。范围栏按钮没有消失;整个搜索控制器界面被解除。如果您想在导航栏中查看带有范围按钮的示例,请告诉我。但是,总的来说,我感觉 Apple 希望您在结果表视图中使用分段控件(如果您愿意,我也可以向您展示一个示例)。
  • @matt 您能否展示一个使用导航栏设置范围按钮的示例?

标签: ios swift ios11


【解决方案1】:

尝试在 setupNavBar() 中添加此代码:

searchController.dimsBackgroundDuringPresentation = false

【讨论】:

  • 这有点奏效。然后导致无法再点击背景解除对搜索栏的关注的问题。
【解决方案2】:

我能够使用 Artem 的解决方案,

searchController.dimsBackgroundDuringPresentation = false

但后来我遇到了无法再点击背景以消除对搜索栏的关注的问题。

为了解决这个问题,我创建了自己的 dimmer uiview(屏幕尺寸,黑色背景色,不透明度为 25%),并将其添加到当前显示的屏幕的视图中,并监听点击。当用户点击它时,我将其淡出并设置

searchController.active = false

【讨论】:

  • 你能发布一个实现的例子吗?
【解决方案3】:

在你的 ViewController 中,你需要添加这一行

self.definesPresentationContext = YES;

这告诉 UISearchController 它需要使用的表示上下文,它由你的 ViewController 定义。

查看此链接了解更多详情:http://asciiwwdc.com/2014/sessions/228

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多