【问题标题】:UISearchBar in UINavigationControllerUINavigationController 中的 UISearchBar
【发布时间】:2018-12-30 08:13:18
【问题描述】:

我想以编程方式将UISearchBar 放入UINavigationController,而不是替换UINavBar 标题,因为我希望显示大标题。请参阅 iOS 上的文件应用程序。


这是我的.swift

class Search: UITableViewController, UISearchBarDelegate

override func viewDidLoad() {
    super.viewDidLoad()
    searchBar()
}

func searchBar() {
    let searchController = UISearchController(searchResultsController: nil)
    navigationItem.searchController = searchController
    navigationItem.searchController?.searchBar.placeholder = "search".localized
    navigationItem.searchController?.dimsBackgroundDuringPresentation = false
    navigationItem.hidesSearchBarWhenScrolling = false
}


关键是:通过将nil 更改为实际的searchResultsController,在搜索栏中输入文本后,整个导航控制器(带有搜索栏和输入的文本)被searchResultsController 视图所取代。 输入时没有搜索栏。

我正在努力在应用程序中使用 iOS 11/12 原生外观和感觉,将搜索栏放入 TableViewController 是不可能的。有人可以帮我吗?

【问题讨论】:

  • 您需要不同的视图控制器来显示结果吗?这就是你在将 nil 更改为 searchResultsController 时所做的事情,我发现你更新这个很奇怪,通常你直接用你想要的视图控制器初始化 UISearchController(这里是你的 searchResultsController 而不是 nil 然后是视图控制器)。
  • @adrgrondin 我不需要不同的视图控制器。通常,我在使用情节提要中的搜索栏时迷路了。如果您可以将此作为实际答案,那就太好了,tbh :) 谢谢!
  • 好的,我会发布一个答案来尝试解释你。

标签: ios uinavigationcontroller uikit uisearchbar uinavigationitem


【解决方案1】:

如果您不需要其他视图控制器来显示结果,只需使用(它不会使您的导航栏消失):

let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self

之后不要更改该值。

您的大部分代码都很好,但是您需要实现 UISearchResultsUpdating 协议来检测更新(当用户在搜索栏中写入时)并使用表格视图(在您的视图控制器内)来显示搜索结果. 您可以通过在函数内重新加载表格视图的数据来做到这一点:updateSearchResults(for searchController:) 在使用搜索栏中的文本过滤所需的数据后。你可以阅读这个关于这个主题的好 tutorial 以获取更多信息。

【讨论】:

  • 我正在启动,会在接下来的 5 分钟内通知您。
  • 祝你好运!
  • 工作。你的教程对我帮助很大,确实:)
  • 很高兴它对您有所帮助。祝您的项目和 iOS 开发顺利!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多