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

Cli*_*int 3 search xcode uisearchbar ios swift

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

然而接下来我想导航到集合视图中包含 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
       }
Run Code Online (Sandbox Code Playgroud)

编辑

只是添加到下面的答案中,如果有人遇到此问题并且您想要获得将搜索栏视为按钮的效果,请使用

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

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

Raj*_*r R 6

添加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
    }
}
Run Code Online (Sandbox Code Playgroud)