或者是以正确的方式在所有需要的视图上手动实现搜索栏的简单方法吗?
我必须在我的应用程序中的几乎每个视图上添加一个搜索栏(除了在每个视图导航栏上添加一个按钮)。但我不确定实现这一目标的最佳方法是什么。
如果我应该继承哪个类是正确的?
我的想法是继承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
,但搜索栏既不可见也不是红色导航栏。
答案 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
}
}