Как изменить UIPickerViewData, когда я выбираю другой UITextField? - PullRequest
0 голосов
/ 07 октября 2018

Я хочу показать UIPickerView при прикосновении к UITextField.

И я создал UITextField с «местом» при помощи UIPickerView.

Но я не знаю, как сделать еще один UITextFieldс UIPickerView.

Я пытался использовать 'switch', но UITextField не был значением, поэтому я не мог сделать это с 'switch'.

Я хочу изменить UIPickerViewData, когда явыберите другое UITextField.

Как я могу это сделать?

Вот коды.

Спасибо!

@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 голосов
/ 07 октября 2018

Очень простой способ сделать это.

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
}
...