“UIPickerView”中的多列

时间:2017-06-22 13:43:21

标签: ios swift uipickerview

在我的项目中添加了Days和month 如何在(日期和时间)UIPickerView中添加两个字段。 在我的代码是

logger

输出是:

[图片缺失]

我期待这个输出:

enter image description here

3 个答案:

答案 0 :(得分:2)

class TableViewController: UITableViewController ,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource{

@IBOutlet var dateTextfield:UITextField!
    @IBOutlet var dateLabel:UILabel!
    let datePicker = UIPickerView()
override func viewDidLoad() {
        super.viewDidLoad()
        self.dateTextfield.delegate = self

        self.datePicker.dataSource = self
        self.datePicker.delegate = self

        self.dateTextfield.inputView = self.datePicker

        let toolBar = UIToolbar()
        toolBar.barStyle = UIBarStyle.default
        toolBar.isTranslucent = true
        toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
        toolBar.sizeToFit()
        let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.doneButtonTapped))
        toolBar.setItems([doneButton], animated: false)
        self.dateTextfield.inputAccessoryView = toolBar
}
func doneButtonTapped(){
        self.dateTextfield.resignFirstResponder()
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.endEditing(true)
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

//----------------   PickerView  delegate Method   --------------------------------//

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 2
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return self.pickerDaysmonth[component].count
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return self.pickerDaysmonth[component][row]
    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        let days =  pickerDaysmonth[0][pickerView.selectedRow(inComponent: 0)]
        let month = pickerDaysmonth[1][pickerView.selectedRow(inComponent: 1)]
        dateTextfield.text =   days + " " + month

    }

在UIPickerView()

中为textfield分配输入视图
let datePicker = UIPickerView()

self.dateTextfield.inputView = self.datePicker

在toolBar

中为textfield分配inputAccessoryView
let toolBar = UIToolbar()
    self.dateTextfield.inputAccessoryView = toolBar

工作正常

当前输出为:

enter image description here

答案 1 :(得分:1)

函数numberOfComponentsnumberOfRowsInComponent来自数据源,而非委托。

因此,您需要将此行添加到viewDidLoad

self.pickerview.delegate = self

答案 2 :(得分:1)

以防万一有人在协议调用内寻找组件的OBJC调用

  • 使用的行数

     return [yourArrayName[component] count];
    
  • 用于行标题

     return yourArrayName[component][row];