Метод делегата UITextfield в mvvm - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно найти таблицу в mvvm.

моя viewmodel: - функция поиска: -

 func search(searchText :String?) {

        filteredListArray = datasourceModel.dataListArray?.filter{($0.restaurantname?.range(of: searchText!, options: .caseInsensitive) != nil)}

  }

И в viewcontroller я только что дал метод делегата текстового поля.

мой viewcontroller: -

 class QM_SearchViewController: UIViewController,UITableViewDelegate,UITableViewDataSource, UISearchBarDelegate,UITextFieldDelegate {


    @IBOutlet private weak var tableView: UITableView!
    @IBOutlet weak var searchBar: UISearchBar!
    @IBOutlet weak var txt: UITextField!

    var isSearching = false
    var search:String=""

    var filteredSearchArray = NSMutableArray()


    private var searchViewModel :QM_SearchViewModel!

    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, withViewModel viewModel:QM_SearchViewModel) {

        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

        searchViewModel  = viewModel
    }




    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        self.title = "SEARCH"


        txt.delegate = self

     searchViewModel.loadData { (isSuccess) in


        if(isSuccess == true)
        {

            self.tableView.reloadData()

        }
        else{

            }
        }


    }

   func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {






        print("While entering the characters this method gets called")
       return true;
  }


    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {  //delegate method
        return false
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {   //delegate method
        textField.resignFirstResponder()

        return true
    }



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {



        return searchViewModel.numberOfRowsInSection(section: section)


}

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


        let identifier = "searchcell"
        var cell: QM_SearchCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? QM_SearchCell

        if cell == nil {
            tableView.register(UINib(nibName: "QM_SearchCell", bundle: nil), forCellReuseIdentifier: identifier)
            cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? QM_SearchCell
        }






       cell.setsearchData(search: searchViewModel.datafordisplay(atindex: indexPath))



        return cell
    }




}

Таким образом, в текстовом поле делегат КАК я могу искать. Как можно взять функцию поиска из viewmodel. Как происходит поиск таблицы просмотра

1 Ответ

0 голосов
/ 07 мая 2018

Только в стороне от вашего shouldChangeCharactersIn вы можете позвонить searchViewModel Метод поиска, если он не запускает автоматическое обновление вашего источника данных, вам нужно будет запустить ваш источник данных после метода поиска вызова

   func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        if let text = textField.text,
            let textRange = Range(range, in: text)  {
            let updatedText = text.replacingCharacters(in: textRange,
                                                       with: string)

            if updatedText.count > 2 {
                let result  = searchViewModel.search(searchText :updatedText)

                //  result Should update your data Source searchViewModel.numberOfRowsInSection , and reload tableView
            }
        }
            return true;
    }
...