使用未解析的标识符,识别包含相同信息的2个不同的pickerView。在斯威夫特

时间:2016-10-15 20:40:38

标签: swift

我在程序设计上非常新,我正在尝试构建一个应用程序,但我无法弄清楚如何解决我的问题。所有的帮助都很高兴!!!!

所以在我的应用程序中有2个pickerViews,每个pickerView包含相同的信息。我的问题是,我想从两者中获取信息,然后将其连接到Google或Yahoo以在2之间找到正确的计算,并在显示屏的底部显示该计算。

我所做的是使用函数didSelectRow for pickerView,我添加了一个模态警报,这样当我滚动pickerView时我可以告诉该函数正在运行,但是它对于两个pickerViews都是这样做我想要的两个pickerViews都是完全独立的功能。

我的主要问题是我无法访问didSelectRow中的数据,因此我可以在另一个函数中进行计算(我已经设置了一个函数来处理带有占位符乘数的计算/转换,直到我将它连接到API)。我知道来自该函数的数据超出了范围(这是编译器给我的错误)但是我无法弄清楚如何访问这些信息,我已经搜索了几周。

非常感谢你!所有的帮助很高兴赞赏!!!!! PS。这是在斯威夫特。

1 个答案:

答案 0 :(得分:2)

如果您为两个pickerViews创建@IBOutlet

@IBOutlet weak var picker1: UIPickerView!
@IBOutlet weak var picker2: UIPickerView!

您可以通过以下方式访问每个选定的行:

let row1 = picker1.selectedRow(inComponent: 0)
let row2 = picker2.selectedRow(inComponent: 0)

然后,您可以将它们用作为您的拣货员提供数据的数组的索引。

作为一个例子,我创建了一个带有两个选择器的视图,每当其中一个选择器发生变化时我会打印出这个总和:

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    @IBOutlet weak var picker1: UIPickerView!
    @IBOutlet weak var picker2: UIPickerView!

    var data = [1, 2, 3, 4, 5]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let sum = data[picker1.selectedRow(inComponent: 0)] + data[picker2.selectedRow(inComponent: 0)]
        print(sum)
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return data.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return String(data[row])
    }
}