搜索栏文本高于0时删除单元格



我已经创建了一个tableView,我首先设置了该表格,如果searchController处于活动状态,则应使用过滤后的数组。但是,当搜索栏包含超过0个字符时,我想首先这样做。但是,这似乎不起作用。这是我到目前为止在CellForrowatIndExpath

中所做的
    if (count(self.teamSearchController.searchBar.text) > 0) {
        team = filteredTableData[indexPath.row] as Team
        cell.textLabel?.text = team.name as String
    } else {
        team = self.teamArray[indexPath.row] as Team
        cell.textLabel?.font = UIFont(name: "HelveticaNeue-Light", size: 20)
        cell.textLabel?.text = team.name as String
    }

updatesearchresultsforsearchcontroller

func updateSearchResultsForSearchController(searchController: UISearchController)
{

    filteredTableData.removeAll(keepCapacity: false)
    let searchPredicate = NSPredicate(format: "name CONTAINS[c] %@ OR shortname CONTAINS[c] %@", searchController.searchBar.text, searchController.searchBar.text)
    let array = (teamArray as NSArray).filteredArrayUsingPredicate(searchPredicate) as! [Team]
    filteredTableData = array
    self.tableView.reloadData()
}

您应该检查 updateSearchResultsForSearchController

中的搜索文本长度
func updateSearchResultsForSearchController(searchController: UISearchController)
{
    if searchController.searchBar.text == "" {
        filteredTableData = self.teamArray      
    } else {
        filteredTableData.removeAll(keepCapacity: false)
        let searchPredicate = NSPredicate(format: "name CONTAINS[c] %@ OR shortname CONTAINS[c] %@", searchController.searchBar.text, searchController.searchBar.text)
        let array = (teamArray as NSArray).filteredArrayUsingPredicate(searchPredicate) as! [Team]
        filteredTableData = array
    }
    self.tableView.reloadData()
}

如下所示,在cellForRowAtIndexPath中更新代码,只需检查searchController是否处于活动状态

if (self.teamSearchController.active) {
    team = filteredTableData[indexPath.row] as Team
} else {
    team = self.teamArray[indexPath.row] as Team
    cell.textLabel?.font = UIFont(name: "HelveticaNeue-Light", size: 20)
}
cell.textLabel?.text = team.name as String

我认为在每个表观视图单元格中查询搜索栏不是不错的设计。取而代之的是,只有一个图视图显示的一个数组。

每当搜索栏内容更改时,将要在表中显示的数组的内容更改为过滤的数组。在更新方法中处理您的边缘箱。我认为您写的IF语句应该可以正常工作。

最新更新