选择更改标签。 UIPickerView

时间:2012-08-17 13:23:37

标签: objective-c ios uipickerview

我现在使用的代码无效,每次加载它并在UIPickerView中滚动它会自动使用“else”语句的值。

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if ([pickerView selectedRowInComponent:0]) {
    [label setText:@"row1"];
}
if ([pickerView selectedRowInComponent:3]) {
    [label setText:@"row2"];
}
if ([pickerView selectedRowInComponent:4]) {
    [label setText:@"row3"];
}
else {
     [label setText:@"row else"];
}
}

我做错了什么?

5 个答案:

答案 0 :(得分:1)

试试这个:

因为您在返回类型中使用numberOfComponentsInPickerView = 1。

那么,为什么要与rowInComponent api进行比较。

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

   if(row == 0)
     [label setText:@"row3"];

   else if(row == 1)
     [label setText:@"row3"];

   else if(row == 3)
     [label setText:@"row3"];

   else
     [label setText:@"other"]; // this line will be called when row will be 2 or >3
  }

有多少行 - pickerView:numberOfRowsInComponent:方法。

答案 1 :(得分:0)

使用与此类似的代码。

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

{
if (pickerView.tag==1)
  {
    if (row == 0)
    {
          [label setText:@"row1"];
    }

   else if (row == 1)
    {
         [label setText:@"row2"];

    }

   else if (row == 2)
    {
            [label setText:@"row3"];

    }
   else{
            [label setText:@"row else"];

       }
  }
}

答案 2 :(得分:0)

尝试将if语句改为“else if”语句,而不是创建多个if语句。

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:    (NSInteger)component {
if ([pickerView selectedRowInComponent:0]) {
    [label setText:@"row1"];
}
else if ([pickerView selectedRowInComponent:3]) {
    [label setText:@"row2"];
}
else if ([pickerView selectedRowInComponent:4]) {
    [label setText:@"row3"];
} 
else {
     [label setText:@"row else"];
}
}

答案 3 :(得分:0)

原因是它没有满足任何这些条件,selectedRowInComponent返回NSInteger,而不是布尔值。因此,您必须更新if条件以包含值,例如

 [selectedRowInComponent:1]==1

答案 4 :(得分:0)

您的所有条件都基于此方法的返回值:selectedRowInComponent返回一个整数值。因为它返回该组件中所选行的索引,所以您的值可以是-1到X,X是组件中有多少行。

如果您希望在其中一行上选择任何内容时更新文本,则需要查看所选行索引是否大于-1,这意味着在选择器视图中实际选择了一行。

所以尝试更像这样的东西:

if ([pickerView selectedRowInComponent:0] > -1) {
    [label setText:@"row1"];
}
else if ([pickerView selectedRowInComponent:3] > -1) {
    [label setText:@"row2"];
}
else if ([pickerView selectedRowInComponent:4] > -1) {
    [label setText:@"row3"];
}
else {
     [label setText:@"row else"];
}