2017-10-11 12 views
0

J'ai donc un contrôleur de recherche sur mon élément de navigation.Contrôleur de recherche dans le comportement de confusion de l'élément de navigation

// View controller 
var searchController = UISearchController(searchResultsController: nil) 

// viewWillAppear() 
override func viewWillAppear(_ animated: Bool) { 
tableView.reloadData() 
if #available(iOS 11.0, *) { 
    navigationController?.navigationBar.prefersLargeTitles = true 
} 
if employeeSearchList.count > 10 { 
    if #available(iOS 11.0, *) { 
    navigationItem.searchController = searchController 
    } else { 
    tableView.tableHeaderView = searchController.searchBar 
    } 
} else { 
    if #available(iOS 11.0, *) { 
    let search = UISearchController(searchResultsController: nil) 
    navigationItem.searchController = search 
    navigationItem.searchController = nil 
    } else { 
    tableView.tableHeaderView = nil 
    } 
} 
UIView.animate(withDuration: 0.50, animations: { 
    self.view.layoutIfNeeded() 
}) 
} 

Ce morceau de code fonctionne parfaitement. Si le nombre est inférieur à 10, searchController est défini, sinon il est défini sur searchController vide, puis défini sur nil, de sorte qu'il disparaît de l'interface utilisateur.

// viewDidLoad() 
searchController.searchResultsUpdater = self 
searchController.dimsBackgroundDuringPresentation = false 
searchController.searchBar.tintColor = tintColor 

// Table view editing delegate -> delete operation 
if employeeSearchList.count < 10 { 
     if #available(iOS 11.0, *) { 
     let search = UISearchController(searchResultsController: nil) 
     navigationItem.searchController = search 
     navigationItem.searchController = nil 
     } else { 
     tableView.tableHeaderView = nil 
     } 
     UIView.animate(withDuration: 0.50, animations: { 
     tableView.reloadData() 
     self.view.layoutIfNeeded() 
     }) 
    } 

Maintenant, mon problème est, quand je présente un viewController au-dessus de celui-ci et ensuite rejeter, le viewWillAppear exécute bien, mais le SearchController ne se présente pas. Mais si je pousse le viewController et que je reviens, ça se voit.

Quelle est la principale différence entre les deux opérations? (push/pop & present/dismiss)

Répondre

0

Lorsque vous présentez une autre forme de contrôleur de vue, vous présentez une nouvelle hiérarchie de viewController, je veux dire, vous êtes en dehors du précédent contrôleur de navigation. Si vous poussez un nouveau contrôleur depuis le contrôleur de navigation, vous l'ajoutez à la pile et la barre de navigation s'affiche.

+0

J'espérais quelque chose comme - quelle fonction supplémentaire, délégué, etc serait appelé dans chaque cas. –

0

Résolu.

Cela devrait être navigationController.navigationItem.searchController = searchController, au lieu de navigationItem.searchController = searchController.

Ce dernier ne prendra effet que la prochaine fois que le module navigationController sera actualisé/chargé/quel que soit le terme approprié?