我有array
个模型数据,我将该数据加载到tableview
中。
我想为该tableview
进行搜索。我使用文本字段,并根据用户输入过滤array
和reload
tableview
。
请在下面找到我的代码。
在tableview
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let model = array[indexPath.row]
if let rate = model.price
{
cell.pricelbl.text = "$" + rate
}
cell.namelbl.text = model.prodName ?? ""
if (indexPath.row % 2 == 0){
cell.uiview.backgroundColor = UIColor.white
} else {
cell.uiview.backgroundColor = UIColor.lightBaground
cell.uiview.layer.cornerRadius = 15
}
}
//Textfield delegate methods.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == searchtextfield
{
var foundItems = [BaseApparel]()
foundItems = self.array.filter { $0.prodName == searchtextfield.text! }
self.array = foundItems
self.searchtableview.reloadData()
}
return true
}
答案 0 :(得分:0)
对数据使用两个字段:array
和filteredArray
。
默认情况下,数组和filteredArray应该相同:
let array : Array<String> = ["1", "2", "3"];
var filteredData = Array<String>() {
didSet{
self.tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
filteredData = array
}
使用filteredData数组生成单元格:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.filteredData.count
}
如果用户更改了文本,则更新filteredData和reloadTable:
@objc func textChangedNotification(_ notification: Notification) {
self.filteredData = self.array.filter { $0.prodName == searchtextfield.text! }
}
使用textDidChangeNotification观察文本字段中的文本变化。