当 searchBar 文本高于 0 时删除单元格
Remove cells when searchBar text is above 0
我创建了一个 tableView,我首先将其设置为如果 searchController 处于活动状态,它应该使用过滤后的数组。但是,当 searchBar 包含超过 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()
}
我认为在每个 table 视图单元格中查询搜索栏不是好的设计。相反,table 视图只显示一个数组。
每当搜索栏内容发生变化时,将要在table中显示的数组内容更改为过滤后的数组。在更新方法中处理您的边缘情况。我认为你写的 if 语句应该可以正常工作。
您应该在 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
我创建了一个 tableView,我首先将其设置为如果 searchController 处于活动状态,它应该使用过滤后的数组。但是,当 searchBar 包含超过 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()
}
我认为在每个 table 视图单元格中查询搜索栏不是好的设计。相反,table 视图只显示一个数组。
每当搜索栏内容发生变化时,将要在table中显示的数组内容更改为过滤后的数组。在更新方法中处理您的边缘情况。我认为你写的 if 语句应该可以正常工作。
您应该在 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