2017-07-03 47 views
0

我使用UISearchBar搜索地址簿&显示结果。Swift3 UISearchBar不能正常工作

在我的地址簿,还有凯特·贝尔,安娜·阿罗,丹尼尔·希金斯等

首先尝试:“凯特钟”显示我的权利。

enter image description here

第二个尝试: “安娜哈罗” 显示我凯特&安娜。

enter image description here

然后第三次尝试:“丹尼尔·希金斯” ......从这一刻起的UISearchBar不能给我正确的结果....

enter image description here

我不知道是什么问题&如何解决这个....

我在下方附上我的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() 
} 
+1

小区2不会从'cellForRowAt'返回 – Magnas

+0

@Magnas感谢您的回复!但我没有进入你的身体......你能解释一下吗? –

+0

在'tableView:cellForRowAt:'你创建'cell'并且你也创建'cell2'你返回'cell',但是你对'cell2'没有做任何事情 – Magnas

回答

2

这里是我的方法: -

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()  
     }