在1个VC中使用两个UI选择器,处理委托方法

时间:2017-01-04 15:42:39

标签: ios swift picker

我在1个VC中有2个选择器,并且知道应该使用if else来识别这应该用于识别每个应该遵循的委托方法。但是我很想知道这个我不知道我应该在我的方法上返回什么才能使它们正常工作。

这是代码,我刚刚使用了0和""现在要防止代码错误,直到我能得到正确的退货结果。

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    if pickerView == repsPicker {
        return 1
    } else if pickerView == setsPicker {
        return 1
    }
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if pickerView == repsPicker {
        return repPickerValues.count
    } else if pickerView == setsPicker {
        return self.setsPickerValues.count
    }
    return 0
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView == repsPicker {
        return repPickerValues[row]
    } else if pickerView == setsPicker {
        return self.setsPickerValues[row]
    }
    return ""
}

3 个答案:

答案 0 :(得分:2)

您可以为每个选择器设置标记,以便区分它们。使用两个不同的值设置pickerView.tag,并在每个委托方法中检查标记值以确定返回值。

答案 1 :(得分:1)

let repPickerValues = ["America", "Mexico", "Canada"]
let setsPickerValues = ["India", "China", "Malaysia", "Singapore"]

如果这些是您的值,那么您将在第一个选择器上有3个选项,在第二个选择器上有4个选项。

添加以下行将调用这些函数

repsPicker.delegate = self
setsPicker.delegate = self

您的视图控制器类应符合UIPickerViewDelegateUIPickerViewDataSource。像

class ViewController: UIPickerViewDelegate, UIPickerViewDatSource {

}

此功能将告诉选择器查看要显示的选项数

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if pickerView == repsPicker {
        return repPickerValues.count
    } else if pickerView == setsPicker {
        return self.setsPickerValues.count
    }
    return 0
}

此函数负责在选择器视图中放置值

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView == repsPicker {
        return repPickerValues[row]
    } else if pickerView == setsPicker {
        return self.setsPickerValues[row]
    }
    return ""
}

这是你要求的吗?

答案 2 :(得分:0)

我可以在这里看到几个选项:

  1. 为每个选择器使用不同的委托对象

    picker1.delegate = firstDelegate()
    picker2.delegate = secondDelegate()
    

    在每个委托对象中以不同方式实现所需的委托方法。

  2. 在视图控制器(或IBOutlet)中保留对每个选择器的引用

    let picker1 = ...
    let picker2 = ...
    

    然后在你的委托方法中

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if pickerView == picker1 { 
            ... 
        }
    }