【问题标题】:Swift conflicting UIPickerViewSwift 冲突的 UIPickerView
【发布时间】:2017-08-03 07:09:53
【问题描述】:

我一直在试图弄清楚为什么选择器视图会向我的函数发送相互冲突的结果。当我更改一个选择器视图时,它会覆盖前一个选择器视图设置的值。 pickerviews 之间的共同点是它们被填充了它们被填充了相同的数组。下面是控制选择器视图的代码和表单的屏幕截图。当首先选择顶部贷方并且最后选择底部贷方时,公式使用底部贷方进行计算。但是,如果我通过首先选择底部贷方然后使用顶级贷方计算的顶级贷方来反转顺序。选择其中包含 60 的值时会发生相同的错误。选择的最后一个值设置传递给公式的值。每个选择的值都需要保持自己的选择值

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

    if pickerView == currentLenderPicker
        {
            return newLender[row]
    }
    else if pickerView == newLenderPicker
    {
        return newLender[row]
    }
    else if pickerView == currentPaymentFrequencyPicker
    {
        return paymentFrequency[row]
    }
    else if pickerView == newPaymentFrequencyPicker
    {
        return paymentFrequency[row]
    }
    else if pickerView == mortgageTermPicker
    {
        return mortgageTerm[row]
    }
    else if pickerView == newMortgageTermPicker
    {
        return mortgageTerm[row]
    }
    return ""

}


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

    if pickerView == currentLenderPicker
        {
            return lenders.count
    }
    else if pickerView == newLenderPicker
    {
        return newLender.count
    }
    else if pickerView == currentPaymentFrequencyPicker
    {
        return paymentFrequency.count
    }
    else if pickerView == newPaymentFrequencyPicker
    {
        return paymentFrequency.count
    }
    else if pickerView == mortgageTermPicker
    {
        return mortgageTerm.count
    }
    else if pickerView == newMortgageTermPicker
    {
        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 == currentLenderPicker
        {
            orginalLender.text = lenders[row]

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

        }
        else if pickerView == currentPaymentFrequencyPicker
        {
            currentPaymentFrequency.text = paymentFrequency[row]
        }
        else if pickerView == newPaymentFrequencyPicker
        {
            newPaymentFrequency.text = paymentFrequency[row]
        }

        else if pickerView == mortgageTermPicker
        {
            currentMortgageTerm.text = mortgageTerm[row]
        }
        else if pickerView == newMortgageTermPicker
        {
            newMortgageTerm.text = mortgageTerm[row]
        }

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

        self.view.endEditing(false)
}

我使用标签进行了更改,但我仍然遇到同样的问题。下面更新了代码。

    // 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)
}

【问题讨论】:

标签: swift uipickerview


【解决方案1】:

您应该使用标签来指示特定的pickerView。检查这个答案,它会解决问题

Implement PickerView With Tag

希望对你有帮助。

【讨论】:

  • 我切换到使用标签,出现同样的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2014-10-03
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
相关资源
最近更新 更多