Как создать несколько pickerView в одном контроллере представления? - PullRequest
0 голосов
/ 02 марта 2019
@IBOutlet weak var searchMonth: UITextField!

@IBOutlet weak var searchDate: UITextField!

var months =["January","Febrary","March","April","May","June","July","August","September","October","November","December"]

var year = ["2017","2018","2019"]

let thePicker = UIPickerView()

    let thePicker2 = UIPickerView()

    override func viewDidLoad() {
        super.viewDidLoad()

        searchMonth.inputView = thePicker
        thePicker.delegate = self

        searchMonth.inputView = thePicker2
        thePicker2.delegate = self


    }


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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        if searchMonth.tag == 1{
             return months.count
        }
        else if searchDate.tag == 2{

            return year.count
        }
        else {
            return 0
        }


    }

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

        if searchMonth.tag == 1 {
             return months[row]
        }
        else if searchDate.tag == 2{
           return year[row]
        } else{
              return ""
        }

        }

    func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        if searchMonth.tag == 1  {
             searchMonth.text = months[row]
        }
        else if searchDate.tag == 2 {
            searchDate.text = year[row]
        }


    }

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

класс SearchResult: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {

@IBOutlet weak var searchMonth: UITextField!
@IBOutlet weak var searchDate: UITextField!

var months = ["January","Febrary","March","April","May","June","July","August","September","October","November","December"]
var year = ["2017","2018","2019"]
let monthPicker = UIPickerView()
let datePicker = UIPickerView()

override func viewDidLoad() {
    super.viewDidLoad()

    searchMonth.inputView = monthPicker
    searchMonth.delegate = self

    searchDate.inputView = datePicker
    searchDate.delegate = self
    monthPicker.dataSource = self
    datePicker.dataSource = self

}

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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    if pickerView == monthPicker {
        return months.count
    }else if pickerView == datePicker {
        return year.count
    }else {
        return 0
    }
}

func pickerView( _ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView == monthPicker {
        return months[row]
    }else if pickerView == datePicker {
        return year[row]
    }else {
        return ""
    }
}

func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == monthPicker {
        searchMonth.text = months[row]
    }else if pickerView == datePicker {
        searchDate.text = year[row]
    }
}

//Not showing data
0 голосов
/ 02 марта 2019

Во-первых, вы назначаете сборщик тому же текстовому полю searchMonth, по вашему мнению, загрузилось.

Вы должны назвать свой сборщик так, чтобы лучше понять

let monthPicker = UIPickerView()
let datePicker = UIPickerView()

Второйвам просто нужно заменить ваше состояние соответствующим представлением выбора, ваши методы будут выглядеть следующим образом: -

@IBOutlet weak var searchMonth: UITextField!
@IBOutlet weak var searchDate: UITextField!

var months =["January","Febrary","March","April","May","June","July","August","September","October","November","December"]
var year = ["2017","2018","2019"]

let monthPicker = UIPickerView()
let datePicker = UIPickerView()


override func viewDidLoad() {
    super.viewDidLoad()
    searchMonth.inputView = monthPicker
    monthPicker.delegate = self
    monthPicker.dataSource = self
    searchDate.inputView = datePicker
    datePicker.delegate = self
    datePicker.dataSource = self
}

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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if pickerView == monthPicker {
        return months.count
    }else if pickerView == datePicker {
        return year.count
    }else {
        return 0
    }
}

func pickerView( _ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView == monthPicker {
        return months[row]
    }else if pickerView == datePicker {
        return year[row]
    }else {
        return ""
    }
}

func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == monthPicker {
        searchMonth.text = months[row]
    }else if pickerView == datePicker {
        searchDate.text = year[row]
    }
}

Если вы используете только два средства выбора в вашем контроллере представления, вы можете уменьшить размер кода с помощьюпростые условия, такие как: -

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerView == monthPicker ? months.count : year.count
}
...