如何更改每个组件中的行数

时间:2010-11-30 14:05:20

标签: iphone objective-c uipickerview

alt text

如何更改每个组件中的行数 我有这个:

- (NSInteger) pickerView:(UIPickerView *)pickerView  numberOfRowsInComponent:(NSInteger)component
{
return 3;
}

但这会更改所有组件行号

接下来的问题是:如何更改第三个组件中的值与UIDatePicker相同:例如:在日期(1月)中,天数为31,但是(2月)天数为(29/28),第三个组件必须变化和值将在1-29或1-28之间。

3 个答案:

答案 0 :(得分:8)

每个选择器都会调用-pickerView:numberOfRowsInComponent:并询问每个组件的行数。所以这个方法被调用三次,因为你有三个组件。因此,您需要为组件返回不同的值。您在component变量中获得一个NSInteger,以指示要求的组件:

- (NSInteger) pickerView:(UIPickerView *)pickerView  numberOfRowsInComponent:(NSInteger)component
{
    switch(component) 
    {
        case 0: // first component has 42 rows
            return 42;
        case 1: // second component has 21 rows
            return 21;
        case 2: // third component has only two rows
            return 2;
    }
}

答案 1 :(得分:1)

取决于您的需求。返回不同的号码。

- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{

if(CONDITION 1)
return 2;
else if(CONDITION 2)
return 3;
}

答案 2 :(得分:1)

您可以在方法

中更改每个组件的行数

- (NSInteger) pickerView:(UIPickerView *)pickerView  numberOfRowsInComponent:(NSInteger)component
{
    switch(component) 
    {
        case 0: // first component has 12 rows for example months
            return 12;
        case 1: // second component has 31 rows for example days

           return 31;
    }
}

关于计算第二个组件中行数(天)的第二个问题,您必须保留一个变量来存储选择的月份。根据所选月份,您可以保留一个变量来存储第二个组件中的行数(天)。让变量为,当第一个组件(月)的选择发生变化时,您必须更新该变量。然后,您必须按如下方式更改以前的代码:

- (NSInteger) pickerView:(UIPickerView *)pickerView  numberOfRowsInComponent:(NSInteger)component
{
    switch(component) 
    {
        case 0: // first component has 12 rows for example months
            return 12;
        case 1: // second component to show days            
           return days;
    }
}

希望你能理解......