【问题标题】:Cannot Select TableViewCell when Search Bar is active - iOS Swift搜索栏处于活动状态时无法选择 TableViewCell - iOS Swift
【发布时间】:2017-05-09 11:53:32
【问题描述】:

我有一个连接到表格视图的搜索栏。当搜索栏未激活但单元格选择在搜索栏处于活动状态时禁用时,它完全按照我的意愿工作。我已经对其进行了调试,并且当我在搜索处于活动状态时选择一行时,甚至没有调用 didSelectRowAtIndexPath。这可能是什么原因造成的?

以下是相关代码:

class FabricsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchControllerDelegate, UISearchDisplayDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        searchController.delegate = self
        searchController.searchBar.delegate = self
        searchController.searchResultsUpdater = self
        searchController.dimsBackgroundDuringPresentation = false
        searchController.definesPresentationContext = false
        searchController.hidesNavigationBarDuringPresentation = false
        myTableView.tableHeaderView = searchController.searchBar

    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if searching {
            searching = false
            searchBar?.resignFirstResponder()
            FirebaseClient.sharedInstance.joinFabric(uid: self.appDelegate.uid!, fabricKey: allFabrics[indexPath.row].key)
            updateFabricList()
        } else {
             appDelegate.selectedFabricKey = joinedFabrics[indexPath.row].key
             performSegue(withIdentifier: "fabricSelected", sender: self)
        }
        myTableView.deselectRow(at: indexPath, animated: false)
    }

    func filterContentForSearchText(searchText: String, scope: String = "All") {
        if let allFabrics = allFabrics {
            filteredFabrics = allFabrics.filter { fabric in
                return (fabric.name.lowercased().contains(searchText.lowercased()))
            }
            myTableView.reloadData()
            myTableView.setContentOffset(CGPoint.zero, animated: false)
        }
    }

}

extension FabricsViewController: UISearchResultsUpdating {
    func updateSearchResults(for: UISearchController) {
        filterContentForSearchText(searchText: searchController.searchBar.text!)
    }
}

【问题讨论】:

  • 您的问题是什么?说清楚
  • myTableView.deselectRow(at: indexPath, animated: false) 删除这一行并检查它。
  • 当搜索栏处于非活动状态时,我可以选择行。但是,当搜索栏变为活动状态并在表格视图中显示过滤列表时,我无法再选择单元格。问题不能取消,因为当搜索栏处于活动状态时,甚至没有调用 didSelectRowAt indexPath。是不是和table view的delegate有关?
  • updateFabricList() 显示你的这个方法
  • 尝试设置searchController. searchBar.clipsToBounds = true

标签: ios tableview searchbar


【解决方案1】:
  1. 请检查您的方法名称的文本。 确保您使用的方法名称如下:

覆盖 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

  1. 您已将 searchBar 的委托设置为 self。当搜索激活时,您是否激活了任何点击手势?这种点击手势可能会中断您的 didSelectRowAtIndexPath 方法。

【讨论】:

    【解决方案2】:

    对于那些面临同样问题的人,根据 Apple 的文档,您应该有以下代码来添加 searchController:

    if #available(iOS 11.0, *) {
       navigationItem.searchController = searchController
    } else {
        self.yourTableView.tableHeaderView = searchController.searchBar
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-17
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多