如何在触发第一个uipickerview时更改第二个uipickerview标题

时间:2018-03-07 14:11:00

标签: objective-c uipickerview

我是编程新手,这是我的第一个问题。 我有2个uipickerviews.the第一个pickerview有三个标题。例如A,B,C。我想从第一个选择视图中选择A,第二个选择视图显示1,2,3。当我从第一个挑选者视图中选择B时,第二个选择者视图显示4,5,6。当我从第一个选秀视图中选择C时,第二个选秀视图显示为7,8,9。 我知道这是选择pickerview时触发功能的方法

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

并且这是在uipickerviews中定义标题的方法

-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

问题是我不能把第二种方法放在第一种方法中。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:0)

所以你有一个类,通常是UIViewController,其UIView(或后代UIView)拥有你的pickerView。这个类需要实现UIPickerViewDelegate。所以你提到的那些方法都会出现在你的课堂上。

作为一种典型的解决方案,您的班级会有一些状态来跟踪您的第二个pickerView的标题。在每个委托方法中,您可以访问该状态(该类的成员)和/或根据需要进行更改。

var secondPickerViewData = ["1", "2", "3"]  // desired data state for 2nd pickerView.

当您更改状态时,请务必告诉pickerView重新加载其数据(这会触发iOS调用您的委托再次获取数据)。您可以使用reloadAllComponents()来执行此操作。

self.secondPickerViewData = ["4", "5", "6"]
self.secondPickerView.reloadAllComponents()

哦,并且将同一个类作为两个pickerViews的委托是很好的和典型的。这就是为什么每个UIPickerViewDelegate方法的第一个参数是委托调用引用的pickerView。因此,请确保您对这些委托方法的实现注意第一个参数中引用的pickerView,因此您的方法将知道该怎么做。

这就是它的全部!我会留下确切的解决方案给你解决,但这回答了你的问题。

答案 1 :(得分:0)

您可以在设置

后尝试
    firstPicker.dataSource = self;

    firstPicker.delegate = self;

    secondPicker.dataSource = self;

    secondPicker.delegate = self;

//当你选择第一个选择器中的任何项目时,你想要将第二个选择器的标题设置为组件0第0行

  -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    if(pickerView == firstPicker)
    {
        secondPicker.selectRow(0, inComponent: 0, animated: true)
    }

 }

答案 2 :(得分:0)

谢谢你们的回答!我想我找到了解决方案!

[self.pickerview reloadAllComponents];

并且有效