Ios 滚动tableview并在searcher应用程序中单击
我有一个Ios 滚动tableview并在searcher应用程序中单击,ios,swift,uitableview,swift3,uisearchbar,Ios,Swift,Uitableview,Swift3,Uisearchbar,我有一个表视图,显示员工列表。现在,当我滚动表视图时,如果滚动尚未停止,如果我单击搜索栏,应用程序就会崩溃。索引超出范围。我不知道为什么会这样。请,如果有人能帮忙的话。事先非常感谢你 注意:Tableview是用listArray加载的。当用户搜索时,我使用searchArray来显示搜索结果 代码: func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { self.searchedArray = []
表视图
,显示员工列表。现在,当我滚动表视图时,如果滚动尚未停止,如果我单击搜索栏,应用程序就会崩溃。索引超出范围。我不知道为什么会这样。请,如果有人能帮忙的话。事先非常感谢你
注意:Tableview是用listArray加载的。当用户搜索时,我使用searchArray来显示搜索结果
代码:
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
self.searchedArray = []
searchEnable = true
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell:ListingCell = self.tableView.dequeueReusableCell(withIdentifier: "Cell") as! ListingCell
if searchEnable {
self.setEmployeeDetailsInTableView(cell: cell, index: indexPath.row, dataArray: searchedArray)
}
else{
self.setEmployeeDetailsInTableView(cell: cell, index: indexPath.row, dataArray: listArray)
}
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if (searchBar.text?.characters.count)! > 0 {
searchEnable = true
getListForSearchedText(searchText)
}
if searchBar.text?.characters.count == 0{
searchEnable = false
self.tableView.reloadData()
}
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchEnable = false
self.searchedArray = []
self.tableView.reloadData()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
getListForSearchedText(searchBar.text!)
searchBar.resignFirstResponder()
}
崩溃:
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
self.searchedArray = []
searchEnable = true
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell:ListingCell = self.tableView.dequeueReusableCell(withIdentifier: "Cell") as! ListingCell
if searchEnable {
self.setEmployeeDetailsInTableView(cell: cell, index: indexPath.row, dataArray: searchedArray)
}
else{
self.setEmployeeDetailsInTableView(cell: cell, index: indexPath.row, dataArray: listArray)
}
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if (searchBar.text?.characters.count)! > 0 {
searchEnable = true
getListForSearchedText(searchText)
}
if searchBar.text?.characters.count == 0{
searchEnable = false
self.tableView.reloadData()
}
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchEnable = false
self.searchedArray = []
self.tableView.reloadData()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
getListForSearchedText(searchBar.text!)
searchBar.resignFirstResponder()
}
致命错误:索引超出范围
您之所以面临此问题,是因为您在searchBarTextDidBeginEditing(:)
中过早地将searchEnable
设置为true
意味着searchBarTextDidBeginEditing(
),因此正如您所说的tableView
仍在滚动,因此,它将调用cellforrowatinexpath
,因为searchEnable
是true
您将遇到此崩溃。现在要解决您的问题,您需要将searchEnable
设置为true
以初始化searchedArray
数组并重新加载tableView
因此,您需要在方法searchBar(\uuuuOldChangeTextIn:replacementText:)
中将searchEnable
设置为true
,
,或者可能在方法getListForSearchedText中,您可以显示正在崩溃的代码吗请单击搜索栏修改listArray?否,我不是在修改listArray。@Jenikhan如果你需要帮助,那么你需要向我们展示你的代码。@Jenikhan你需要发布更多的代码。回答这么多,如果这是问题,我会更新。是的,你是对的@Nirav,我刚刚删除了“SearchBartextDiBeginediting(searchBar:UISearchBar)”函数中的代码,现在它工作正常。谢谢。:)