繁体   English   中英

在点击搜索栏时,TableView不会第一次填充数据

[英]TableView doesnot populate data for the first time while tapping on Search bar

我试图通过UISearchController实现搜索栏,并实现为

 func updateSearchResultsForSearchController(searchController: UISearchController) {

            filteredTableData.removeAll(keepCapacity: true)

            let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text)

            let array = (tabledata as NSArray).filteredArrayUsingPredicate(searchPredicate)
            filteredTableData = array as! [String]
            self.tblView.reloadData()

        }

但是,当我们点击搜索栏时,表tableview不会填充数据。 否则,一切正常。

我也尝试检查搜索栏的文本是否大于1,但它在初始时有效,但在退格上却给我错误。 什么是hack?

您应该实现UISearchbarDelegate的 this方法

  • 搜索栏:textDidChange:

所以你的线会是

 func searchBar(searchBar: UISearchBar, textDidChange searchText: String) 
{

        filteredTableData.removeAll(keepCapacity: true)
        let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchBar.text)

        let array = (tabledata as NSArray).filteredArrayUsingPredicate(searchPredicate)
        filteredTableData = array as! [String]
        self.tblView.reloadData()
}

您需要在此之前将searchBar.delegate设置为self

我的问题的解决方案是

func updateSearchResultsForSearchController(searchController:UISearchController){

if count(searchController.searchBar.text) > 0{


    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text)

    let array = (tabledata as NSArray).filteredArrayUsingPredicate(searchPredicate)
    filteredTableData = array as! [String]
    self.tblView.reloadData()
}else if count(searchController.searchBar.text) == 0 {

    filteredTableData =  tabledata
    self.tblView.reloadData()

}

您可以按照Saad的想法进行操作:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {


    if count(searchBar.text) > 0{


    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchBar.text)

    let array = (tabledata as NSArray).filteredArrayUsingPredicate(searchPredicate)
    filteredTableData = array as! [String]
    self.tblView.reloadData()
    }else if count(searchBar.text) == 0 {

          filteredTableData =  tabledata
        self.tblView.reloadData()

    }


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM