在搜索控制器处于活动状态时选择 table 行时应用崩溃
App crashing when selecting table row while search controller Active
当我的搜索控制器处于活动状态时,每当我 select 一行 table 时,我的应用程序似乎就会崩溃。
注意事项:
- 我的搜索控制器嵌入到我的 table header
- 我目前有一个修复程序,但是,它需要在 table 行 selected 时关闭我的搜索控制器。这会导致糟糕的 UI 体验。我不想关闭我的搜索控制器
这是我的一些代码:
class ViewProfileViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UISearchBarDelegate, UISearchResultsUpdating {
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.sizeToFit()
searchController.searchBar.searchBarStyle = .minimal
searchController.searchBar.placeholder = "Search City"
searchController.searchBar.showsCancelButton = true
searchController.searchBar.delegate = self
searchController.searchBar.backgroundColor = UIColor.white
self.myTable.tableHeaderView = searchController.searchBar
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if searchController.isActive {
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
} else {
}
let mViewController = MController()
let navController = UINavigationController(rootViewController: mViewController)
present(navController,animated: true, completion: nil)
}
}
不要在选择单元格时弹出视图控制器。也无需检查 searchController
是否处于活动状态。
示例:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// Get rid of searchController
searchController.searchBar.endEditing(true)
searchController.isActive = false
searchController.dismiss(animated: true) { /* */ }
// Deselect row
tableView.deselectRow(at: indexPath, animated: true)
// Present your VC here
}
当我的搜索控制器处于活动状态时,每当我 select 一行 table 时,我的应用程序似乎就会崩溃。
注意事项:
- 我的搜索控制器嵌入到我的 table header
- 我目前有一个修复程序,但是,它需要在 table 行 selected 时关闭我的搜索控制器。这会导致糟糕的 UI 体验。我不想关闭我的搜索控制器
这是我的一些代码:
class ViewProfileViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UISearchBarDelegate, UISearchResultsUpdating {
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.sizeToFit()
searchController.searchBar.searchBarStyle = .minimal
searchController.searchBar.placeholder = "Search City"
searchController.searchBar.showsCancelButton = true
searchController.searchBar.delegate = self
searchController.searchBar.backgroundColor = UIColor.white
self.myTable.tableHeaderView = searchController.searchBar
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if searchController.isActive {
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
} else {
}
let mViewController = MController()
let navController = UINavigationController(rootViewController: mViewController)
present(navController,animated: true, completion: nil)
}
}
不要在选择单元格时弹出视图控制器。也无需检查 searchController
是否处于活动状态。
示例:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// Get rid of searchController
searchController.searchBar.endEditing(true)
searchController.isActive = false
searchController.dismiss(animated: true) { /* */ }
// Deselect row
tableView.deselectRow(at: indexPath, animated: true)
// Present your VC here
}