Так что я просто использовал этот пост , чтобы добавить вторую pickerView
к моему ViewController
. Я использовал ответ пользователя «LAOMUSIC Arts», который реализовал идею использования тегов из принятого решения.
Вот моя реализация:
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate{
var molyRow = ""
var tungRow = ""
var molyPickerViewOptions = ["mils", "mm", "in."]
var tungPickerViewOptions = ["mils", "mm", "in."]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if (pickerView.tag == 1){
return molyPickerViewOptions.count
}else{
return tungPickerViewOptions.count
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if (pickerView.tag == 1){
molyRow = "\(molyPickerViewOptions[row])"
print("molyRow = ", "\(molyPickerViewOptions[row])")
return "\(molyPickerViewOptions[row])"
}else{
tungRow = "\(tungPickerViewOptions[row])"
print("tungRow = ", "\(tungPickerViewOptions[row])")
return "\(tungPickerViewOptions[row])"
}
}
Как видите, у меня есть печать tungRow
и molyRow
вместе с соответствующими значениями. Таким образом, когда я запускаю приложение в симуляторе, я вижу, какое значение оно приобретает.
Когда я попробовал это, я наткнулся на что-то действительно странное. Он будет правильно возвращать «mils» и «mm», когда они выбраны в симуляторе, но если я «пролистываю» из строки «mils» или «mm» вниз до «in». ряд, по какой-то причине вернет "милс". Я приложу видео, чтобы показать вам.
Видео
Как вы можете видеть, сборщик, похоже, правильно возвращает «мил» и «мм» в большинстве случаев времени, однако на основе как я «щелкаю» сборщиком » в." не всегда будет возвращено, когда это необходимо.
Пожалуйста, дайте мне знать, если я смогу сделать этот пост лучше, конкретнее и т. Д.
С нетерпением жду ответа. Заранее спасибо!
РЕДАКТИРОВАТЬ: Получив предложение попробовать pickerView(_:didSelectRow:inComponent:)
, я попытался реализовать функцию как возврата, так и печати номера строки. Я отредактировал функцию pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int)
так, что она просто устанавливает заголовок:
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if (pickerView.tag == 1){
return "\(molyPickerViewOptions[row])"
}else{
return "\(tungPickerViewOptions[row])"
}
}
private func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) -> Int{
if (pickerView.tag == 1){
molyRow = row
print("molyRow = ", "\(row)")
return row
}else{
tungRow = row
print("tungRow = ", "\(row)")
return row
}
}
Обратите внимание, что когда я попытался реализовать функцию pickerView(_:didSelectRow:inComponent:)
, Xcode предупредил меня: Instance method 'pickerView(_:didSelectRow:inComponent:)' nearly matches optional requirement 'pickerView(_:didSelectRow:inComponent:)' of protocol 'UIPickerViewDelegate'
Make 'pickerView(_:didSelectRow:inComponent:)' private to silence this warning
Я попытался запустить с функцией и без нее private
. В любом случае, он по-прежнему не печатает номер строки.