TextField в UIPickerView - PullRequest
       35

TextField в UIPickerView

0 голосов
/ 25 сентября 2019

Мне нужна твоя помощь.Я использую textField, чтобы открыть pickerView (и я сделал это успешно).Но то, что мне действительно нужно сделать, это поместить текстовое поле в окне выбора (или в любом другом месте) и сделать его SearchTextField .Возможно ли это?

Это мой код:

class pruebaPickerViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{

    @IBOutlet weak var textField: TextField!
    var list = ["iPhone 6s", "iPhone 6s Plus", "iPhone SE"]


    override func viewDidLoad() {
        super.viewDidLoad()
        var pickerView = UIPickerView()
        pickerView.delegate = self
        pickerView.dataSource = self
        textField.inputView = pickerView
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int{
        return list.count
    }

    func pickerView(_ pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String! {
        return list[row]
    }

    func pickerView(_ pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
    {
        textField.text = list[row]
    }
}

1 Ответ

0 голосов
/ 26 сентября 2019

Пожалуйста, попробуйте для решения

class ViewController: UIViewController ,UIPickerViewDelegate, UIPickerViewDataSource, UISearchBarDelegate{

    var data = ["San Francisco","New York","San Jose","Chicago","Los Angeles","Austin","Seattle"]
    var filtered:[String] = []
    var pickerView = UIPickerView()
    var searchActive : Bool = false


    @IBOutlet weak var searchBar: UISearchBar!

    override func viewDidLoad() {
        super.viewDidLoad()

        pickerView.delegate = self
        pickerView.dataSource = self
        searchBar.inputAccessoryView = pickerView
    }


    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        if(searchActive) {
            return filtered.count
        }
        return data.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

        if searchActive == true{
            return filtered[row]
        }else{
            return data[row]
        }
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    {
        if searchActive == true{
            searchBar.text = filtered[row]
        }else{
            searchBar.text = data[row]
        }
    }

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

        filtered = data.filter({ (text) -> Bool in
            let tmp = text
//            let range = tmp.rangeOfString(searchText, options: NSString.CompareOptions.CaseInsensitiveSearch)
            let range = tmp.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)
            return ((range?.lowerBound) != nil)
        })
        if(filtered.count == 0){
            searchActive = false;
        } else {
            searchActive = true;
        }
        self.pickerView.reloadAllComponents()
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...