Как добавить кнопки областей в UISearchController, встроенный в UINavigationController

У меня есть приложение, которое представляет MKMapView, встроенный в UINavigationController. В UINavigationController я поместил UISearchController. Когда пользователь касается UISearchController, он отображает UITableViewController. Это работает хорошо, пока я не добавляю кнопку Scope в UISearchController.

Вот скриншот UISearchController в UINavigationController, когда я запускаю приложение.

Затем, когда я касаюсь UISearchController, он отображает UITableViewController и кнопку области действия.

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

Затем, когда я нажимаю кнопку «Отмена», чтобы вернуться к главному viewController, UISearchController не восстанавливает свой первоначальный стиль.

он имеет темно-серую рамку (что, вероятно, происходит от кнопки области).

Вот как я могу добавить UISearchController в главном окне контроллера

    func initSearchController() {
    let mySearchController = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SearchControllerId") as! SearchController

    self.searchController = UISearchController(searchResultsController: mySearchController)

    mySearchController.theSearchController = self.searchController
    mySearchController.delegate = self

    // Configure the UISearchController
    self.searchController.searchResultsUpdater = self
    self.searchController.delegate = self

    self.searchController.searchBar.delegate = self
    self.searchController.searchBar.placeholder = "data.." 
    self.searchController.hidesNavigationBarDuringPresentation = false
    self.searchController.dimsBackgroundDuringPresentation = true

    self.navigationItem.titleView = searchController.searchBar

    self.definesPresentationContext = true


}

этот метод вызывается в viewDidLoad () моего основного ViewController.

Затем, когда отображается SearchController, я добавляю кнопку области со следующим кодом в мой подкласс TableViewController

    override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    // Mandatory to make sure the TableView is displayed when the search field is empty
    // when user touch it.
    view.hidden = false

    var rect = delegate.searchController.searchBar.superview?.frame
    rect?.size.height = 88

    self.delegate.searchController.searchBar.scopeButtonTitles = ["one", "two", "three"]
    self.delegate.searchController.searchBar.showsScopeBar = true
    self.delegate.searchController.searchBar.superview?.frame = rect!
}

и следующий код выполняется, когда поиск закрыт

    override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)


    var rect = delegate.searchController.searchBar.superview?.frame
    rect?.size.height = 44

    self.delegate.searchController.searchBar.superview?.frame = rect!
    self.delegate.searchController.searchBar.showsScopeBar = false
    self.delegate.searchController.searchBar.scopeButtonTitles = nil
}

Как вы видите, у меня есть несколько проблем с этим кодом.

Кнопки области видимости отображаются неправильно, и я не могу добавить их с хорошей анимациейКогда пользователь выходит из области поиска, кнопки удаляются, но это влияет на фон UISearchController.

Можете ли вы сказать мне, что я делаю неправильно, и что я должен сделать, чтобы правильно интегрировать Scope Button в UISearchController ?. Я нашел примеры, но только когда UISearchController не встроен в UINavigationController.

Спасибо за вашу помощь!

Себастьен.

Ответы на вопрос(1)

Ваш ответ на вопрос