Swift 斯威夫特·皮克维

Swift 斯威夫特·皮克维,swift,uipickerview,Swift,Uipickerview,我一直在试图弄清楚为什么选择器视图向我的函数发送冲突的结果。当我更改一个选择器视图时,它将覆盖上一个选定选择器视图设置的值。pickerviews之间的共同点是,它们使用相同的数组填充。下面是控制PickerView的代码和表单的屏幕截图。如果首先选择了最高贷方,最后选择了最低贷方,则公式将使用最低贷方进行计算。但是,如果我先选择最底层的贷方,然后选择使用最高层贷方计算的最高层贷方,则会颠倒顺序。选择包含60的值时也会发生相同的错误。最后选定的值设置传递给公式的值。每个选定值都需要保留自己的选定

我一直在试图弄清楚为什么选择器视图向我的函数发送冲突的结果。当我更改一个选择器视图时,它将覆盖上一个选定选择器视图设置的值。pickerviews之间的共同点是,它们使用相同的数组填充。下面是控制PickerView的代码和表单的屏幕截图。如果首先选择了最高贷方,最后选择了最低贷方,则公式将使用最低贷方进行计算。但是,如果我先选择最底层的贷方,然后选择使用最高层贷方计算的最高层贷方,则会颠倒顺序。选择包含60的值时也会发生相同的错误。最后选定的值设置传递给公式的值。每个选定值都需要保留自己的选定值

我使用标签进行了更改,但仍然存在相同的问题。更新代码如下

    // Load FI Information

   func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    if pickerView.tag == 1
        {
            return newLender[row]
    }
    else if pickerView.tag == 11
    {
        return newLender[row]
    }
    else if pickerView.tag == 10
    {
        return paymentFrequency[row]
    }
    else if pickerView.tag == 15
    {
        return paymentFrequency[row]
    }
    else if pickerView.tag == 6
    {
        return mortgageTerm[row]
    }
    else if pickerView.tag == 17
    {
        return mortgageTerm[row]
    }
    return ""

}


func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    if pickerView.tag == 1
        {
            return lenders.count
    }
    else if pickerView.tag == 11
    {
        return newLender.count
    }
    else if pickerView.tag == 10
    {
        return paymentFrequency.count
    }
    else if pickerView.tag == 15
    {
        return paymentFrequency.count
    }
    else if pickerView.tag == 6
    {
        return mortgageTerm.count
    }
    else if pickerView.tag == 17
    {
        return mortgageTerm.count
    }
    return 1
}

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


    return 1
}

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        if pickerView.tag == 1
        {
            orginalLender.text = lenders[row]

        }
        else if pickerView.tag == 11
        {
            newMortgageLender.text = newLender[row]

        }
        else if pickerView.tag == 10
        {
            currentPaymentFrequency.text = paymentFrequency[row]
        }
        else if pickerView.tag == 15
        {
            newPaymentFrequency.text = paymentFrequency[row]
        }

        else if pickerView.tag == 6
        {
            currentMortgageTerm.text = mortgageTerm[row]
        }
        else if pickerView.tag == 17
        {
            newMortgageTerm.text = mortgageTerm[row]
        }

        if let selectedLender = currentLender.filter({ $0.fiName == lenders[row] }).first {
            Global.selectedRate = selectedLender
        }

        self.view.endEditing(false)
}

您应该使用标记来指示特定的pickerView。检查这个答案&它会把事情弄清楚的


希望有帮助。

每次选择一行时都可能重复执行if let selectLender代码。这是否执行正确的逻辑?currentLender设置在哪里?我切换到使用标签,同样的问题也发生了。
    // Load FI Information

   func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    if pickerView.tag == 1
        {
            return newLender[row]
    }
    else if pickerView.tag == 11
    {
        return newLender[row]
    }
    else if pickerView.tag == 10
    {
        return paymentFrequency[row]
    }
    else if pickerView.tag == 15
    {
        return paymentFrequency[row]
    }
    else if pickerView.tag == 6
    {
        return mortgageTerm[row]
    }
    else if pickerView.tag == 17
    {
        return mortgageTerm[row]
    }
    return ""

}


func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    if pickerView.tag == 1
        {
            return lenders.count
    }
    else if pickerView.tag == 11
    {
        return newLender.count
    }
    else if pickerView.tag == 10
    {
        return paymentFrequency.count
    }
    else if pickerView.tag == 15
    {
        return paymentFrequency.count
    }
    else if pickerView.tag == 6
    {
        return mortgageTerm.count
    }
    else if pickerView.tag == 17
    {
        return mortgageTerm.count
    }
    return 1
}

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


    return 1
}

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        if pickerView.tag == 1
        {
            orginalLender.text = lenders[row]

        }
        else if pickerView.tag == 11
        {
            newMortgageLender.text = newLender[row]

        }
        else if pickerView.tag == 10
        {
            currentPaymentFrequency.text = paymentFrequency[row]
        }
        else if pickerView.tag == 15
        {
            newPaymentFrequency.text = paymentFrequency[row]
        }

        else if pickerView.tag == 6
        {
            currentMortgageTerm.text = mortgageTerm[row]
        }
        else if pickerView.tag == 17
        {
            newMortgageTerm.text = mortgageTerm[row]
        }

        if let selectedLender = currentLender.filter({ $0.fiName == lenders[row] }).first {
            Global.selectedRate = selectedLender
        }

        self.view.endEditing(false)
}