У меня есть UITableView с UISearchController на панели навигации. Содержимое табличного представления обновляется по мере того, как пользователь вводит текст в строку поиска. Когда строка выбрана, другой контроллер табличного представления помещается в стек навигации. На этом новом контроллере табличного представления есть элемент кнопки панели, который представляет лист действий. Проблема в том, что когда я выбираю строку после использования контроллера поиска, а затем пытаюсь открыть лист действий на новом контроллере табличного представления, я получаю
Attempt to present <UIAlertController: 0x103971800> on <KYFB_Black_Book.MembersTableViewController: 0x103854c00> which is already presenting (null)
Если я выбираю строку из первого контроллера без поиска, а затем открываю лист действий на втором контроллере, все работает нормально.
В viewDidLoad() первого контроллера:
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.searchBar.tintColor = .white
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
let searchField = searchController.searchBar.value(forKey: "searchField") as? UITextField
searchField?.textColor = .white
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
searchController.searchBar.frame = CGRect(x: 0, y: 0, width: 200.0, height: 44.0)
searchField?.textColor = .black
searchController.searchBar.tintColor = .black
navigationItem.titleView = searchController.searchBar
}
Обновление результатов на основе текста поиска:
@available(iOS 8.0, *)
func updateSearchResults(for searchController: UISearchController) {
filteredCountyNames.removeAll(keepingCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
let array = (countyNames as NSArray).filtered(using: searchPredicate)
filteredCountyNames = array as! [String]
tableView.reloadData()
}
Во втором контроллере, представляя контроллер предупреждений:
@objc func actionTapped() {
let emailAlert = UIAlertController(title: "Contact All Committee Members", message: "", preferredStyle: .actionSheet)
let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: { (action) in
print("Cancel")
})
let emailAction = UIAlertAction(title: "Email", style: .default, handler: { (action) in
self.emailAll()
})
let messageAction = UIAlertAction(title: "Text Message", style: .default, handler: { (action) in
self.textAll()
})
emailAlert.view.tintColor = UIColor(red: 28.0 / 255.0, green: 75.0 / 255.0, blue: 136.0 / 255.0, alpha: 1)
emailAlert.addAction(emailAction)
emailAlert.addAction(messageAction)
emailAlert.addAction(cancelAction)
present(emailAlert, animated: true, completion: nil)
}
definesPresentationContext
- person Reinier Melian   schedule 25.08.2017