Swift3 UISearchBar不能正常工作
问题描述:
我使用UISearchBar搜索地址簿&显示结果。Swift3 UISearchBar不能正常工作
在我的地址簿,还有凯特·贝尔,安娜·阿罗,丹尼尔·希金斯等
首先尝试:“凯特钟”显示我的权利。
第二个尝试: “安娜哈罗” 显示我凯特&安娜。
然后第三次尝试:“丹尼尔·希金斯” ......从这一刻起的UISearchBar不能给我正确的结果....
我不知道是什么问题&如何解决这个....
我在下方附上我的SWIFT代码..
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()
}
答
这里是我的方法: -
var searchText = ""
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty || searchText == "" {
filtered = data
self.friendsTableView.reloadData()
searchText = searchText
}
else {
searchtext = searchText
filterTableView(text: searchText)
}
}
func filterTableView(text: String) {
filtered = data.filter({ (dis) -> Bool in
return dis.data.lowercased().contains(text.lowercased())
})
self.friendsTableView.reloadData()
}
小区2不会从'cellForRowAt'返回 – Magnas
@Magnas感谢您的回复!但我没有进入你的身体......你能解释一下吗? –
在'tableView:cellForRowAt:'你创建'cell'并且你也创建'cell2'你返回'cell',但是你对'cell2'没有做任何事情 – Magnas