如何根据文本字段中的用户输入过滤数组模型数据

时间:2019-06-19 08:05:51

标签: ios swift uitableview filter textfield

我有array个模型数据,我将该数据加载到tableview中。

我想为该tableview进行搜索。我使用文本字段,并根据用户输入过滤arrayreload 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
    }

1 个答案:

答案 0 :(得分:0)

对数据使用两个字段:arrayfilteredArray

默认情况下,数组和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观察文本字段中的文本变化。