我使用UISearchBar搜索地址簿&显示结果。
在我的地址簿中,有Kate Bell,Anna Haro,Daniel Higgins等。
首先尝试:"凯特贝尔"让我看对了。
第二次尝试:" Anna Haro"告诉我凯特&安娜。
然后第三次尝试:" Daniel Higgins" ......从这一刻起,UISearchBar无法给我正确的结果......
我不知道有什么问题&如何解决这个问题....
我在下方添加了我的快捷代码..
var searchActive : Bool = false
var data:[String] = []
var filtered:[String] = []
override func viewDidLoad() {
super.viewDidLoad()
searchBar.delegate = self
friendsTableView.delegate = self
friendsTableView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(searchActive) {
return filtered.count
}
return contacts.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell : ContactTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ContactTableViewCell", for: indexPath) as! ContactTableViewCell
let cell2 = tableView.dequeueReusableCell(withIdentifier: "ContactTableViewCell")! as UITableViewCell;
let entry = contacts[(indexPath as NSIndexPath).row]
cell.configureWithContactEntry(entry)
cell.layoutIfNeeded()
if(searchActive){
cell2.textLabel?.text = filtered[indexPath.row]
} else {
cell2.textLabel?.text = data[indexPath.row]
}
return cell
}
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filtered = data.filter({ (text) -> Bool in
let tmp: NSString = text as NSString
let range = tmp.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)
return range.location != NSNotFound
})
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.friendsTableView.reloadData()
}
答案 0 :(得分:3)
这是我的方法: -
{{1}}