Как отфильтровать массив словарных данных на основе пользовательского ввода в текстовое поле - PullRequest
0 голосов
/ 19 июня 2019

Привет, я использую данные array модели , я загружаю эти данные в tableview.

Но я хочу найти эти данные , основанные на пользовательском вводе в textField.

  • Код.
     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 ?? ""
      }

    //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 голосов
/ 19 июня 2019

Использовать предикаты: В viewDidLoad () добавьте следующую строку

searchtextfield.addTarget(self, action: #selector(valueDidModify(_:)), for: .editingChanged)

Затем используйте эту функцию:

@objc func valueDidModify(_ sender:UITextField){
      let predicate =  NSPredicate(format:"self.prodName CONTAINS [cd] %@",sender.text)
      let filteredArray = self.array.filter{predicate. evaluateWithObject($0)}
     }

return numberOfRows как filteredArray.count

...