如何在单视图控制器中创建多个uipickerView?

问题描述 投票:-2回答:2
@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]
        }


    }
ios swift swift4.2
2个回答
1
投票

首先,您将选择器分配给视图中的同一文本字段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
}

0
投票

class 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
© www.soinside.com 2019 - 2024. All rights reserved.