我有两个彼此喜欢的viewController。第一个viewController有一个collectionView作为按钮,因此,当您单击collectionView时,它将通过segue将您定向到第二个viewContoller。
@IBAction func presedCollectionViewButton(_ sender: Any) {
performSegue(withIdentifier: "segue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! AllCategoriesViewController
destinationVC.filterText = test
}
然后,我将数据传递给第二个controllView中的searchBar,以便在执行执行segue后过滤tableView,但是它不直接过滤tableView,并且为了查看我传递的filterText我必须单击在viewController的searchBar上。
extension AllCategoriesViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchBar.text = filterText
filteredCategory = allcotegoryLabel.filter({$0.categoryName.prefix(searchText.count) == searchText})
isSearch = true
allCategoriesTableView.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
isSearch = false
searchBar.text = ""
allCategoriesTableView.reloadData()
}
}
所以我的问题是如何解决此问题,并在执行瓶坯检测后让它过滤tableView?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "allCategories", for: indexPath) as! allCategoriesTableViewCell
if isSearch {
cell.allCategoriesLabel.text = filteredCategory[indexPath.row].categoryName
} else {
cell.allCategoriesLabel.text = allcotegoryLabel[indexPath.row].categoryName
}
return cell
}
这是isSearch的一些用法
答案 0 :(得分:0)
您应该将搜索栏文本设置为变量而不是搜索栏。然后,在viewDidLoad()
方法中设置搜索栏文本,然后刷新viewDidLoad
中的tableView。如果这样不起作用,则可以在viewDidAppear
中尝试相同的操作。