Ios 搜索栏:动态更改结果
尝试创建一个搜索栏,根据我点击的字母不断更新表视图。就像这里:Ios 搜索栏:动态更改结果,ios,swift,xcode,searchbar,Ios,Swift,Xcode,Searchbar,尝试创建一个搜索栏,根据我点击的字母不断更新表视图。就像这里: extension-emotionscontoler:UISearchBarDelegate{ func searchBar searchbutton单击(searchBar:UISearchBar){ 如果searchBar.text!.count>1{ let请求:NSFetchRequest=Array.fetchRequest() let predicate=NSPredicate(格式:“名称包含[cd]]@”,searc
extension-emotionscontoler:UISearchBarDelegate{
func searchBar searchbutton单击(searchBar:UISearchBar){
如果searchBar.text!.count>1{
let请求:NSFetchRequest=Array.fetchRequest()
let predicate=NSPredicate(格式:“名称包含[cd]]@”,searchBar.text!)
request.sortDescriptors=[NSSortDescriptor(键:“name”,升序:true)]
loadArray(带:请求,谓词:谓词)
}
}
func searchBar(searchBar:UISearchBar,textDidChange searchText:String){
如果searchBar.text?.count==0{
loadArray()
DispatchQueue.main.async{
searchBar.resignFirstResponder()辞职
}
}
}
我错过了什么?您需要重新加载tableView的数据
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text?.count == 0 {
loadArray()
DispatchQueue.main.async {
searchBar.resignFirstResponder()
} else if searchBar.text!.count > 1 {
let request: NSFetchRequest<Array> = Array.fetchRequest()
let predicate = NSPredicate(format: "name CONTAINS[cd] %@", searchBar.text!)
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
loadArray(with: request, predicate: predicate)
tableView.reloadData()
}
}
func搜索栏(searchBar:UISearchBar,textDidChange searchText:String){
如果searchBar.text?.count==0{
loadArray()
DispatchQueue.main.async{
searchBar.resignFirstResponder()辞职
}否则,如果搜索栏.text!.count>1{
let请求:NSFetchRequest=Array.fetchRequest()
let predicate=NSPredicate(格式:“名称包含[cd]]@”,searchBar.text!)
request.sortDescriptors=[NSSortDescriptor(键:“name”,升序:true)]
loadArray(带:请求,谓词:谓词)
tableView.reloadData()
}
}
在我需要执行此操作的哪一行之后?加载情感(with:request,predicate:predicate)
这行之后尝试过。同样的事情-在我点击ENTER后重新加载表格如果你想在文本更改中更改数组…你需要在textDidChange中执行此操作并重新加载数据是的,它可以工作!我尝试过很多变体,但没有尝试过这一个。非常接近)谢谢!
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text?.count == 0 {
loadArray()
DispatchQueue.main.async {
searchBar.resignFirstResponder()
} else if searchBar.text!.count > 1 {
let request: NSFetchRequest<Array> = Array.fetchRequest()
let predicate = NSPredicate(format: "name CONTAINS[cd] %@", searchBar.text!)
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
loadArray(with: request, predicate: predicate)
tableView.reloadData()
}
}