在swift中根据textfield更改tableview数据

时间:2018-02-20 07:47:32

标签: ios iphone swift uitableview uitextfield

我想根据TableView更改Textfield数据。当用户点击Textfield并开始编辑时,相应地会更改TableView data。我看到了很多例子,但主要是我发现有关搜索栏的任何帮助都会受到赞赏。请注意,这是textfield not seacrhbar

2 个答案:

答案 0 :(得分:5)

你可以尝试

var searchActive : Bool = false

var data = ["San Francisco","New York","San Jose","Chicago","Los Angeles","Austin","Seattle"]

var filtered:[String] = []


   textField.addTarget(self, action: #selector(ViewController.textFieldDidChange(_:)),
                          for: UIControlEvents.editingChanged)

和处理方法:

@objc func textFieldDidChange(_ textField: UITextField) {

 // filter tableViewData with textField.text

  let searchText  = textField.text

  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.tableView.reloadData()

}



func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


  let cell = tableView.dequeueReusableCell(withIdentifier:CellIdentifier1) as! generalTableViewCell

    if(searchActive){
        cell.titlelb.text = filtered[indexPath.row]
    } else {
        cell.titlelb.text = data[indexPath.row];
    }
 }

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if(searchActive){
       return filtered.count
    } else {
        return data.count
    }
}

答案 1 :(得分:0)

您可以在视图控制器中实现textFieldDelegate,然后在委托方法textFieldDidChange中根据您的用途更改tableview数据源,然后重新加载tableview。