单击搜索栏时如何导航到另一个视图控制器

How to navigate to another view controller when search bar is clicked

我有点卡在这里。我在导航栏中嵌入了一个搜索栏作为我想要的标题。

但是接下来我想在 collection 视图中导航到另一个包含 UIsearchcontroller 的视图控制器,当点击取消时,用户将返回到前一个视图。 (非常类似于 Facebook 或 Instagram 对搜索栏控制器的使用)

我是否可以使用搜索栏作为按钮导航到处理所有搜索功能的下一个视图控制器?

这是我目前搜索栏的内容。

    func setUpNavBar() {
       let searchBar = UISearchBar()
       searchBar.sizeToFit()
       searchBar.searchBarStyle = .minimal
       searchBar.placeholder = "Search by username"
       searchBar.tintColor = UIColor.lightGray
       searchBar.barTintColor = UIColor.lightGray
       navigationItem.titleView = searchBar
       searchBar.isTranslucent = true
       }

编辑

只是补充下面的答案,如果有人遇到这个问题并且您想获得将搜索栏视为按钮的效果,请使用

  func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
        self.present(UINavigationController(rootViewController: SearchBarController()), animated: true, completion: nil)
        searchBar.setShowsCancelButton(false, animated: true)
        return false
    }

这样,当您单击搜索栏时,您不会获得显示搜索栏处于活动状态的效果(如果这有意义的话)。当您点击搜索栏时,没有任何效果,它只是将您带到(真实的)搜索视图控制器,然后搜索栏处于活动状态并且键盘显示一个取消按钮。我希望这是有道理的,如果有人想要一个示例,请转到 Instagram、FB 或 Pinterest,然后点击他们的搜索栏或搜索图标,您就会看到。

在第一个视图控制器中添加 UISearchBarDelegate。并在 searchBarTextDidBeginEditing 方法中呈现第二个视图控制器。

//ViewController.swift
class ViewController: UIViewController, UISearchBarDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        setUpNavBar()
    }
    func setUpNavBar() {
        let searchBar = UISearchBar()
        searchBar.delegate = self
        searchBar.sizeToFit()
        searchBar.searchBarStyle = .minimal
        searchBar.placeholder = "Search by username"
        searchBar.tintColor = UIColor.lightGray
        searchBar.barTintColor = UIColor.lightGray
        navigationItem.titleView = searchBar
        searchBar.isTranslucent = true
    }
    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        self.present(UINavigationController(rootViewController: SearchViewController()), animated: false, completion: nil)
    }
}
//SearchViewController.swift
class SearchViewController: UIViewController {
    let searchBar = UISearchBar()
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        setUpNavBar()
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        searchBar.becomeFirstResponder()
    }
    func setUpNavBar() {
        searchBar.sizeToFit()
        searchBar.searchBarStyle = .minimal
        searchBar.placeholder = "Search by "
        searchBar.tintColor = UIColor.lightGray
        searchBar.barTintColor = UIColor.lightGray
        navigationItem.titleView = searchBar
        searchBar.isTranslucent = true
    }
}