私は自分のnavigationItemにsearchcontrollerを持っています。ナビゲーション項目内の検索コントローラが混乱している動作
// 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()
})
}
このコードは完全に動作します。カウントが10より小さい場合はsearchControllerが設定され、それ以外の場合は空のsearchControllerに設定され、その後はUIから消えるようにnilに設定されます。
// 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()
})
}
今私はこの1つ上のViewControllerを提示し、それを閉じたときに私の問題は、viewWillAppearはうまく実行されますが、searchControllerは表示されません。しかし、私はviewControllerを押して、戻ってくる場合、それが表示されます。
2つの操作の主な違いは何ですか? (プッシュ/ポップ&現在/却下)
私は何か別の機能やデリゲートなどが呼び出されるようなことを望んでいました。 –