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,但它在初始时有效,但在退格时给我错误。什么是黑客?
你应该实现UISearchbarDelegate's这个方法
- searchBar: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()
}
}
我正在尝试通过 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,但它在初始时有效,但在退格时给我错误。什么是黑客?
你应该实现UISearchbarDelegate's这个方法
- searchBar: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()
}
}