Como adicionar botões de escopo em um UISearchController incorporado no UINavigationController
Eu tenho um aplicativo que está apresentando um MKMapView incorporado em um UINavigationController. No UINavigationController, coloquei um UISearchController. Quando o usuário toca no UISearchController, ele exibe um UITableViewController. Funciona bem enquanto não estou adicionando o botão Escopo no UISearchController.
Aqui, a captura de tela do UISearchController no UINavigationController quando inicio o aplicativo.
Em seguida, quando toco no UISearchController, ele exibe o UITableViewController e o botão de escopo.
Aqui já podemos ver que há um problema com o botão de escopo porque eles não estão bem integrados no UISearchController (a cor deve ser translúcida)
Em seguida, quando toco no botão Cancelar para retornar ao Controlador principal de exibição, o UISearchController não está recuperando seu estilo original
possui uma borda cinza escura (que provavelmente vem do botão de escopo).
Veja como eu adiciono o UISearchController no modo de exibição principal
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
}
esse método é chamado no viewDidLoad () do meu Main ViewController.
Em seguida, quando o SearchController for exibido, adicionarei o botão de escopo com o seguinte código na minha subclasse 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!
}
e o código a seguir é executado quando a pesquisa é fechada
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
}
Como você pode ver, tenho vários problemas com este código.
Os botões de escopo não são exibidos corretamente e não consigo adicioná-los com uma boa animaçãoQuando o usuário sai, os botões do escopo da pesquisa são removidos, mas isso afeta o plano de fundo do UISearchControllerVocê pode me dizer o que estou fazendo de errado e o que devo fazer para integrar corretamente o botão Scope no UISearchController? Encontrei exemplos, mas apenas quando o UISearchController não está incorporado no UINavigationController.
Obrigado pela ajuda!
Sébastien.