2017-02-18 1 views
1

Или это простой способ реализовать панель поиска вручную на всех необходимых представлениях правильно? Мне нужно добавить поисковую панель почти для каждого вида в моем приложении (в дополнение к тому, чтобы добавить кнопку на каждой навигационной панели просмотров). Но я не уверен, каков наилучший подход для достижения этой цели.
Как добавить панель поиска UIS в каждое представление

  1. Должен ли я подклассифицировать навигационную панель или весь навигационный контроллер?
  2. Или простой способ реализовать панель поиска вручную на всех необходимых представлениях правильно?

Если я должен подкласс, какой класс является правильным? Моя идея заключается в подклассе UINavigationController, добавьте UISearchBar и после того, как результаты поиска будут отобраны, чтобы открыть UITableViewController с результатами поиска.

Это мой нынешний подход (без реализации SearchBar делегата просто проверить, если я нахожусь на рабочем растворе)

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 но ни Searchbar видно ни красный панель навигации.

+0

Извините, но из-за ошибки копирования буфера обмена на моем mac при редактировании вашего вопроса я скопировал предложения. Я рассчитывал, что запрос на редактирование будет отклонен, и SO не имеет функции _edit cancel_. Не могли бы вы правильно переформулировать вопрос? – ystack

ответ

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 
    } 
} 
Смежные вопросы