Ios 如何更改事件触发的pickerviews的值

Ios 如何更改事件触发的pickerviews的值,ios,swift,uipickerview,Ios,Swift,Uipickerview,我想用uipickerview创建我自己的日期选择器,我可以在公元前9999年和公元2015年之间进行选择。我使用的uipickerview包含多个组件。我的前4个组件只包含数字0-9。 组件1包含千年(10002000 usw…)。 我的最后一个组件包含{A.D.&B.C.)。根据最后一个选择器,我将更改组件1的值,该值表示年份的千位数。如果用户在最后一个组件中选择了“A.D.”,则不可能在第一个组件中选择3-9 如何做到这一点 代码: **更新我的解决方案** 我不知道这是否是最佳实践,但我

我想用uipickerview创建我自己的日期选择器,我可以在公元前9999年和公元2015年之间进行选择。我使用的uipickerview包含多个组件。我的前4个组件只包含数字0-9。 组件1包含千年(10002000 usw…)。 我的最后一个组件包含{A.D.&B.C.)。根据最后一个选择器,我将更改组件1的值,该值表示年份的千位数。如果用户在最后一个组件中选择了“A.D.”,则不可能在第一个组件中选择3-9

如何做到这一点

代码:

**更新我的解决方案**

我不知道这是否是最佳实践,但我解决了它如下: 根据年份,我在pickerview中显示不同数量的值:

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


        println("evaluate amount of components");

        let iYear=DataContainer.sharedInstance.iYear;
        if(iYear > 0){

            if component == 0{
                return 3;
            }else if component == 1{
                return 10;
            }else if component == 2{
                return 10;
            }else if component == 3{
                return 10;
            }else if component == 4{
                return 2;
            }else{
                return 1;
            }

        }else{
            if component == 0{
                return 10
            }else if component == 1{
                return 10
            }else if component == 2{
                return 10
            }else if component == 3{
                return 10
            }else if component == 4{
                return 2
            }else{
                return 1;
            }

        }

    }
func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String! {
...
else if component == 4{
            if(row==0){
                if (iYear < 0 ){
                    //DataContainer.sharedInstance.iYear = -iYear;
                    datePicker.reloadAllComponents();
                }
                return "A.D.";
            }else{
                if (iYear > 0 ){
                    //DataContainer.sharedInstance.iYear = -iYear;
                    datePicker.reloadAllComponents();
                }
                //datePicker.reloadAllComponents();
                return "B.C.";
            }
        }
当我更改显示“A.D.”或“B.C.”的最后一个组件(5)时,我只需刷新pickerview:

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


        println("evaluate amount of components");

        let iYear=DataContainer.sharedInstance.iYear;
        if(iYear > 0){

            if component == 0{
                return 3;
            }else if component == 1{
                return 10;
            }else if component == 2{
                return 10;
            }else if component == 3{
                return 10;
            }else if component == 4{
                return 2;
            }else{
                return 1;
            }

        }else{
            if component == 0{
                return 10
            }else if component == 1{
                return 10
            }else if component == 2{
                return 10
            }else if component == 3{
                return 10
            }else if component == 4{
                return 2
            }else{
                return 1;
            }

        }

    }
func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String! {
...
else if component == 4{
            if(row==0){
                if (iYear < 0 ){
                    //DataContainer.sharedInstance.iYear = -iYear;
                    datePicker.reloadAllComponents();
                }
                return "A.D.";
            }else{
                if (iYear > 0 ){
                    //DataContainer.sharedInstance.iYear = -iYear;
                    datePicker.reloadAllComponents();
                }
                //datePicker.reloadAllComponents();
                return "B.C.";
            }
        }
func pickerView(pickerView:UIPickerView!,titleForRow行:Int,forComponent:Int)->String{
...
如果组件==4,则为else{
如果(行==0){
如果(iYear<0){
//DataContainer.sharedInstance.iYear=-iYear;
datePicker.reloadAllComponents();
}
返回“A.D.”;
}否则{
如果(iYear>0){
//DataContainer.sharedInstance.iYear=-iYear;
datePicker.reloadAllComponents();
}
//datePicker.reloadAllComponents();
返回“B.C.”;
}
}

显然,您必须对第五个组件中的更改做出反应。在
pickerView(didSelectRow:Incomonent)
中,处理从a.D.到a.D.的更改。可能需要保留一个标志,指示选择了哪个组件


然后调用
reloadComponent()
重新加载所有组件
以更新选取器视图。

非常感谢。我只是自己做出来的。也许你可以查看我在问题中的更新以确认这是最佳做法?谢谢。看起来不错;-)。有时写问题有助于清楚地理解问题。是的,确实如此。或者可能我是某个时候有点太不耐烦了:-)我希望这个问题也能帮助别人。