将数据传递到SearchBar

时间:2019-04-23 21:24:19

标签: ios swift uisearchbar

我有两个彼此喜欢的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的一些用法

1 个答案:

答案 0 :(得分:0)

您应该将搜索栏文本设置为变量而不是搜索栏。然后,在viewDidLoad()方法中设置搜索栏文本,然后刷新viewDidLoad中的tableView。如果这样不起作用,则可以在viewDidAppear中尝试相同的操作。