如何在每个视图上添加UISearchbar

时间:2017-02-18 23:56:54

标签: ios swift uinavigationcontroller

或者是以正确的方式在所有需要的视图上手动实现搜索栏的简单方法吗? 我必须在我的应用程序中的几乎每个视图上添加一个搜索栏(除了在每个视图导航栏上添加一个按钮)。但我不确定实现这一目标的最佳方法是什么。

  1. 我应该是导航栏还是整个导航控制器的子类?
  2. 或者是以正确的方式在所有需要的视图上手动实现搜索栏的简单方法吗?
  3. 如果我应该继承哪个类是正确的? 我的想法是继承UINavigationController,添加UISearchBar,然后提取搜索结果以打开带有搜索结果的UITableViewController

    这是我目前的方法(没有实现搜索栏委托只是为了检查我是否在使用工作解决方案)

    import UIKit
    
    class MyNavigationControllerViewController: UINavigationController {
    
        var searchController : UISearchController!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.navigationBar.backgroundColor = UIColor.red
            self.createSearchBar()
        }
    
        func createSearchBar() {
            let searchBar = UISearchBar()
            searchBar.showsCancelButton = true
            searchBar.placeholder = "Search"
            // searchBar.delegate = self
            self.navigationItem.titleView = searchBar
        }
    }
    

    至少,调试器输入MyNavigationController,但搜索栏既不可见也不是红色导航栏。

1 个答案:

答案 0 :(得分:1)

我建议使用带有扩展名的协议,该扩展程序将提供导航栏和项目的配置。然后,您可以扩展任何视图控制器以符合它并使用协议的默认实现。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        configureNavigationBar()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

extension ViewController: SearchController { }

protocol SearchController: class { }
extension SearchController where Self: UIViewController {

    func configureNavigationBar() {
        navigationController?.navigationBar.backgroundColor = UIColor.red
        let search = UISearchBar()
        search.placeholder = "Search"
        search.showsCancelButton = true
        navigationItem.titleView = search
    }
}