选择其他UITextField时如何更改UIPickerViewData?

时间:2018-10-07 01:12:38

标签: swift uipickerview

我想在点击UITextField时显示UIPickerView。

然后我用UIPickerView制作了一个“放置” UITextField。

但是,我不知道如何使用UIPickerView制作另一个UITextField。

我尝试使用'switch',但是UITextField不是一个值,所以我无法使用'switch'。

当我选择其他UITextField时,我想更改UIPickerViewData。

我该怎么办?

这是密码。

谢谢!

@IBOutlet weak var place: UITextField!
@IBOutlet weak var product: UITextField!
@IBOutlet weak var number: UITextField!

let placeArray = ["A", "B", "C", "D", "E", "F"]
let productArray = ["Apple", "Banana", "Grape"]
let numberArray = ["1", "2", "3", "4", "5", "6"]

var pickerView = UIPickerView()
var textField: UITextField!

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

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

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

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



override func viewDidLoad() {
    super.viewDidLoad()

    pickerView.delegate = self
    pickerView.dataSource = self

    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(displayPickerView))
    tapGesture.numberOfTapsRequired = 1
    place.addGestureRecognizer(tapGesture)

}


@objc private func displayPickerView() {
    if textField == nil {
        self.textField = UITextField(frame: .zero)
        textField.inputView = self.pickerView
        self.view.addSubview(textField)
    }
    textField.becomeFirstResponder()
}

1 个答案:

答案 0 :(得分:0)

一种非常简单的方法。

var placePickerView = UIPickerView()
var productPickerView = UIPickerView()
var numberPickerView = UIPickerView()

override func viewDidLoad() {
super.viewDidLoad()

placePickerView.delegate = self
placePickerView.dataSource = self
place.inputView = placePickerView

productPickerView.delegate = self
productPickerView.dataSource = self
product.inputView = productPickerView

numberPickerView.delegate = self
numberPickerView.dataSource = self
number.inputView = numberPickerView

}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    var numberOfRows: Int = 1
    if pickerView == placePickerView {
    numberOfRows = placeArray.count
    } else if pickerView == productPickerView {
        numberOfRows = productArray.count
    } else if pickerView == numberPickerView {
        numberOfRows = numberArray.count
    }
    return numberOfRows
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == placePickerView {
        place.text = placeArray[row]
    } else if pickerView == productPickerView {
        productType.text = productArray[row]
    } else if pickerView == numberPickerView {
        transactionType.text = numberArray[row]
    } 
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    var title: String?
    if pickerView == placePickerView {
        title = placeArray[row]
    } else if pickerView == productPickerView {
        title = productArray[row]
    } else if pickerView == numberPickerView {
        title = numberArray[row]
    }
    return title
}