Ios 当UISearchController处于活动状态时显示UIAlertController
我有一个UITableView,它在导航栏中有一个UISearchController。当用户在搜索栏中键入时,表视图内容将更新。选择一行后,另一个表视图控制器将被推送到导航堆栈。在新的表视图控制器上,有一个显示操作表的条形按钮项。问题是,当我在使用搜索控制器后选择一行,然后尝试在新的表视图控制器上打开操作表时,我得到Ios 当UISearchController处于活动状态时显示UIAlertController,ios,swift,uialertcontroller,uisearchcontroller,Ios,Swift,Uialertcontroller,Uisearchcontroller,我有一个UITableView,它在导航栏中有一个UISearchController。当用户在搜索栏中键入时,表视图内容将更新。选择一行后,另一个表视图控制器将被推送到导航堆栈。在新的表视图控制器上,有一个显示操作表的条形按钮项。问题是,当我在使用搜索控制器后选择一行,然后尝试在新的表视图控制器上打开操作表时,我得到 Attempt to present <UIAlertController: 0x103971800> on <KYFB_Black_Book.Members
Attempt to present <UIAlertController: 0x103971800> on <KYFB_Black_Book.MembersTableViewController: 0x103854c00> which is already presenting (null)
根据搜索文本更新结果:
@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()
}
在第二个控制器中,显示警报控制器:
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
}
@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)
}
你能试试看它是否有效吗?只需替换代码中显示操作表的最后一行
if let presentedVC = presentedViewController {
presentedVC.present(emailAlert, animated: true, completion: nil)
} else {
present(emailAlert, animated: true, completion: nil)
}
你能试试看它是否有效吗?只需替换代码中显示操作表的最后一行
if let presentedVC = presentedViewController {
presentedVC.present(emailAlert, animated: true, completion: nil)
} else {
present(emailAlert, animated: true, completion: nil)
}
在使用UISearchController并尝试呈现UIAlertController时,我也出现了相同的错误。试试这个:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// To avoid the problem
search.dismiss(animated: false, completion: nil)
}
在使用UISearchController并尝试呈现UIAlertController时,我也出现了相同的错误。试试这个:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// To avoid the problem
search.dismiss(animated: false, completion: nil)
}
我认为这个问题与
definesPresentationContext
property@ReinierMelian我尝试将其设置为true,但得到了相同的结果。@raginggoat似乎是MembersTableViewController在呈现操作表之前呈现了一些内容。您确定没有任何内容介绍吗?我认为该问题与definesPresentationContext
property@ReinierMelian我尝试将其设置为true,但得到了相同的结果。@raginggoat似乎是MembersTableViewController在呈现操作表之前呈现了一些内容。你确定没有显示任何内容吗?我不想在打开UIAlearView之前关闭搜索栏,即使搜索栏可见也只需显示它!我不想在打开UIAlearView之前关闭搜索栏,即使搜索栏可见也要显示它!