【发布时间】:2020-03-02 13:17:57
【问题描述】:
我有一个奇怪的问题,但我想你们可以很容易地告诉我这个错误。我正在为多个文本字段使用选择器视图。但它只显示每个文本字段的“最后一个数组”,并将最后一个文本字段中所选行的所有内容推到顶部。 因此,似乎每个文本字段只控制最后一个文本字段。
这里是涉及的代码,希望你们能帮助我:
class SignUpViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
//Mark: Properties
@IBOutlet weak var genderPicker: UITextField!
@IBOutlet weak var branchePicker: UITextField!
@IBOutlet weak var countryPicker: UITextField!
// Picker View Arrays
let genders = ["male", "female", "non-binary"]
let branches = ["Advertising", "Architecture", "Design: Product", "Design: Graphic", "Design: Fashion", "Design: Others", "Film/ Video & TV", "IT", "Museums & Galleries", "Music", "Photography", "Performing & Visual Arts", "Radio", "Others"]
let countries = ["Austria", "Australia", "USA", "Germany"]
// Picker View
var pickerViewSignUp = UIPickerView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Pickers
pickerViewSignUp.delegate = self
pickerViewSignUp.dataSource = self
// Delegates
genderPicker.textAlignment = .center
genderPicker.inputView = pickerViewSignUp
genderPicker.placeholder = "Select Gender"
branchePicker.textAlignment = .center
branchePicker.inputView = pickerViewSignUp
branchePicker.placeholder = "Select Branch"
countryPicker.textAlignment = .center
countryPicker.inputView = pickerViewSignUp
countryPicker.placeholder = "Select Country"
}
// Mark: PickerViews
// List of the SignUp used Drop Down Items
// TextField delegate
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
pickerViewSignUp.reloadAllComponents()
return true
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerViewSignUp == genderPicker {
return genders.count
} else if pickerViewSignUp == branchePicker {
return branches.count
} else {return countries.count}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerViewSignUp == genderPicker {
return genders[row]
} else if pickerViewSignUp == branchePicker {
return branches[row] } else {return countries[row]}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerViewSignUp == genderPicker {
genderPicker.text = genders[row]
} else if pickerViewSignUp == branchePicker {
branchePicker.text = branches[row]
} else {countryPicker.text = countries[row]}
}
}
【问题讨论】:
-
看这里的 pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int): pickerViewSignUp == genderPicker 等等...你是在比较 UITextField 和 UIPickerView...它总是错误的。
-
感谢您的快速答复!你能否给我一个提示如何做得更好? :)
-
@Schaedel420 如果您点击特定按钮,是否希望显示“性别数组”?如果您点击另一个按钮,将显示另一个数组?
-
确切地@Putte 点击“性别”时,Pickerview 应该让用户选择性别......然后他应该选择他的分支,国家等等......
-
我建议使用 3 个布尔值进行比较。
标签: ios swift xcode uitextfield uipickerview