将数据传递给 SearchBar
Pass Data to SearchBar
我有 2 个 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,以便在执行 perform segue 后过滤 tableView,但它不会直接过滤 tableView 并且为了查看我传递的 filterText 我有单击 viewController.
中的搜索栏
extension AllCategoriesViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchBar.text = filterText
filteredCategory = allcotegoryLabel.filter({[=11=].categoryName.prefix(searchText.count) == searchText})
isSearch = true
allCategoriesTableView.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
isSearch = false
searchBar.text = ""
allCategoriesTableView.reloadData()
}
}
所以我的问题是如何解决这个问题,并让它在预制件 segue 执行后过滤 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
的一些用法
您应该将搜索栏文本设置为变量而不是搜索栏。然后,在 viewDidLoad()
方法中设置搜索栏文本,然后在 viewDidLoad
中刷新 tableView。如果这不起作用,您可以在 viewDidAppear
中尝试相同的操作。
我有 2 个 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,以便在执行 perform segue 后过滤 tableView,但它不会直接过滤 tableView 并且为了查看我传递的 filterText 我有单击 viewController.
中的搜索栏extension AllCategoriesViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchBar.text = filterText
filteredCategory = allcotegoryLabel.filter({[=11=].categoryName.prefix(searchText.count) == searchText})
isSearch = true
allCategoriesTableView.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
isSearch = false
searchBar.text = ""
allCategoriesTableView.reloadData()
}
}
所以我的问题是如何解决这个问题,并让它在预制件 segue 执行后过滤 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
的一些用法您应该将搜索栏文本设置为变量而不是搜索栏。然后,在 viewDidLoad()
方法中设置搜索栏文本,然后在 viewDidLoad
中刷新 tableView。如果这不起作用,您可以在 viewDidAppear
中尝试相同的操作。