因此,我仅使用this SO Post来向我的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”轻拂。行,由于某种原因它将返回“ mils”。我将附加一个视频给您看。
如您所见,选择器似乎大多数时间正确返回“ mils”和“ mm” ,但是基于 how ,我“轻拂”了选择器,“中”。不会总是在应有的时候返回。
请让我知道我有什么办法可以使这篇文章更好,更具体等。
期待答复。预先感谢!
编辑:得到尝试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
的情况下运行。无论哪种方式,它仍然不会打印行号。
答案 0 :(得分:1)
似乎您正在尝试确定()
方法中的行选择。每当需要确定要在选择器行中显示的文本时,UIKit就会调用该方法。
要找出每当选择更改时选择了哪一行,您应该检出pickerView(_:didSelectRow:inComponent:)
method中的UIPickerViewDelegate。
编辑
Swift不会调用您编写的方法,因为它与委托协议的方法的签名不匹配。 .val
与pickerView(_:titleForRow:forComponent:)
不同。这就是为什么您向编译器警告有关方法名称几乎(但不完全)匹配的原因。
要使UIKit将该方法视为应调用的方法,您需要删除Int返回。如果方法签名匹配,并且您的类已正确分配为选择器的委托(这似乎是因为调用了pickerView(_:didSelectRow:inComponent:)
),则UIKit将看到它并调用它。