在同一视图控制器上的 Swift 中使用 2 个 pickerview 时,我只看到 ?-s,如何解决这个问题?
I see only ?-s when using 2 pickerviews in Swift on the same view controller, how to fix this?
我已经尝试解决这个问题好几个小时了,现在只剩下一个小问题了:
我在一个视图控制器上使用了 2 个 UI 选择器,当我尝试 select 一个(也就是我正在单击文本字段)时,我看到的只是问号,但是如果我单击其中一个,文本将出现在文本字段中。我只是看不到我在选择器中选择了什么。
我已经尝试使用普通的选择器视图,我为每个选择器使用了标签,但似乎没有任何效果。我知道它应该如何工作,我看了很多教程,但仍然缺少一些东西。你能帮我么?谢谢!
代码如下:
import UIKit
class SelectionViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
@IBOutlet weak var ageTextField: UITextField!
@IBOutlet weak var weightTextField: UITextField!
@IBOutlet weak var genderTextField: UITextField!
@IBOutlet weak var lifeStyleTextField: UITextField!
let picker1 = UIPickerView()
let picker2 = UIPickerView()
var genders = ["Male", "Female"]
var lifeStyle = ["Sitting", "Normal", "Active"]
override func viewDidLoad() {
super.viewDidLoad()
picker1.dataSource = self
picker1.delegate = self
picker2.dataSource = self
picker2.delegate = self
genderTextField.inputView = picker1
lifeStyleTextField.inputView = picker2
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfComponentsInPickerView(pickerView : UIPickerView!) -> Int{
return 2
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
if pickerView == picker1 {
return genders.count
} else {
return lifeStyle.count
}
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if pickerView == picker1 {
return genders[row]
} else if pickerView == picker2{
return lifeStyle[row]
}
else {
print("No pickerview selected.")
}
return ("Pickeview not selected")
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == picker1 {
genderTextField.text = genders[row]
self.view.endEditing(false)
} else if pickerView == picker2{
lifeStyleTextField.text = lifeStyle[row]
self.view.endEditing(false)
}
else {
print("Love love love I want your love")
}
}
}
这是我看到的:
您需要这个签名(错过了_)
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
和numberOfComponentsInPickerView
应该return1
我已经尝试解决这个问题好几个小时了,现在只剩下一个小问题了:
我在一个视图控制器上使用了 2 个 UI 选择器,当我尝试 select 一个(也就是我正在单击文本字段)时,我看到的只是问号,但是如果我单击其中一个,文本将出现在文本字段中。我只是看不到我在选择器中选择了什么。
我已经尝试使用普通的选择器视图,我为每个选择器使用了标签,但似乎没有任何效果。我知道它应该如何工作,我看了很多教程,但仍然缺少一些东西。你能帮我么?谢谢!
代码如下:
import UIKit
class SelectionViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
@IBOutlet weak var ageTextField: UITextField!
@IBOutlet weak var weightTextField: UITextField!
@IBOutlet weak var genderTextField: UITextField!
@IBOutlet weak var lifeStyleTextField: UITextField!
let picker1 = UIPickerView()
let picker2 = UIPickerView()
var genders = ["Male", "Female"]
var lifeStyle = ["Sitting", "Normal", "Active"]
override func viewDidLoad() {
super.viewDidLoad()
picker1.dataSource = self
picker1.delegate = self
picker2.dataSource = self
picker2.delegate = self
genderTextField.inputView = picker1
lifeStyleTextField.inputView = picker2
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfComponentsInPickerView(pickerView : UIPickerView!) -> Int{
return 2
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
if pickerView == picker1 {
return genders.count
} else {
return lifeStyle.count
}
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if pickerView == picker1 {
return genders[row]
} else if pickerView == picker2{
return lifeStyle[row]
}
else {
print("No pickerview selected.")
}
return ("Pickeview not selected")
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == picker1 {
genderTextField.text = genders[row]
self.view.endEditing(false)
} else if pickerView == picker2{
lifeStyleTextField.text = lifeStyle[row]
self.view.endEditing(false)
}
else {
print("Love love love I want your love")
}
}
}
这是我看到的:
您需要这个签名(错过了_)
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
和numberOfComponentsInPickerView
应该return1