Swift3 在Swift 3中过滤UICollectionview上的结果不起作用?
使用itemlist首次加载工作正常,但筛选后集合视图不会更新。我添加了搜索栏并尝试筛选结果,但UICollectionview未能更新视图Swift3 在Swift 3中过滤UICollectionview上的结果不起作用?,swift3,uicollectionview,uisearchcontroller,uisearchresultscontroller,Swift3,Uicollectionview,Uisearchcontroller,Uisearchresultscontroller,使用itemlist首次加载工作正常,但筛选后集合视图不会更新。我添加了搜索栏并尝试筛选结果,但UICollectionview未能更新视图 var resultSearchController = UISearchController() //itemlist var itemList = [item1, item2, item3, item4,..] //configured searchbar func viewDidLoad() { self.resultSearchC
var resultSearchController = UISearchController()
//itemlist
var itemList = [item1, item2, item3, item4,..]
//configured searchbar
func viewDidLoad() {
self.resultSearchController = UISearchController(searchResultsController: nil)
self.resultSearchController.searchResultsUpdater = self
self.resultSearchController.searchBar.delegate = self
self.definesPresentationContext = true
self.resultSearchController.dimsBackgroundDuringPresentation = false
self.resultSearchController.searchBar.placeholder = "Search for Items"
self.resultSearchController.searchBar.searchBarStyle = UISearchBarStyle.prominent
self.resultSearchController.searchBar.sizeToFit()
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if resultSearchController.isActive {
return filterSearch.count
}
return itemList.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var item = itemList()
if resultSearchController.isActive {
item = filterSearch[indexPath.row]
} else {
item = itemList[indexPath.row]
}
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellIdentifier", for: indexPath)
cell.titleLabel.text = item
return cell
}
//将项目筛选到filterSearch中,但集合视图未根据筛选器进行更新
func updateSearchResults(for searchController: UISearchController) {
filterSearch = itemList.filter { itemList in
return temList.name.lowercased().contains(searchText.lowercased())
}
self.collectionView?.reloadData()
}
检查代码中的以下更改
var resultSearchController = UISearchController()
//itemlist
var itemList = [item1, item2, item3, item4,..]
//configured searchbar
var issearchactive:Bool = false
func viewDidLoad() {
self.resultSearchController = UISearchController(searchResultsController: nil)
self.resultSearchController.searchResultsUpdater = self
self.resultSearchController.searchBar.delegate = self
self.definesPresentationContext = true
self.resultSearchController.dimsBackgroundDuringPresentation = false
self.resultSearchController.searchBar.placeholder = "Search for Items"
self.resultSearchController.searchBar.searchBarStyle = UISearchBarStyle.prominent
self.resultSearchController.searchBar.sizeToFit()
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if issearchactive {
return filterSearch.count
}
return itemList.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var item = itemList()
if issearchactive {
item = filterSearch[indexPath.row]
} else {
item = itemList[indexPath.row]
}
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellIdentifier", for: indexPath)
cell.titleLabel.text = item
return cell
}
func updateSearchResults(searchText:String) {
filterSearch = itemList.filter { obj in
return obj.name.lowercased().contains(searchText.lowercased())
}
self.collectionView?.reloadData()
}
override func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
issearchactive = true
return true
}
override func textFieldDidEndEditing(_ textField: UITextField) {
updateSearchResults(searchText:textfield.text)
issearchactive = false
}
override func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
updateSearchResults(searchText:textfield.text)
return true
}
您能在代码中提供更多关于“storeList”的代码吗?通过调试,我看到searchcontroller虽然处于活动状态,但未显示为活动状态。你能告诉我我犯了什么错误吗?@phanisay你的代码看起来不错,但是你可以检查“resultSearchController.isActive”,当它在激活编辑resultSearchController时返回“true”。isActive返回“true”,但在编辑时返回false。你能解释一下吗@Phanisai刚刚更新了答案,看看变化