2012-08-17 76 views
0

我现在使用的代码不工作,每当我加载它并在UIPickerView中滚动时,它都会自动使用“else”语句的值。选择更改标签。 UIPickverView

- (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"]; 
} 
} 

我在做什么错?

+0

组件加载时的价值是什么? - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView的值是什么? – CBredlow 2012-08-17 13:29:24

+0

value = return 1; – user1607001 2012-08-17 13:36:26

回答

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"]; 

     } 
    } 
} 
+0

我得到一个警告:pickerView的本地声明隐藏实例变量 – user1607001 2012-08-17 13:35:20

+0

检查我已更新的答案 – Sumanth 2012-08-17 13:43:14

0

而不是创建许多if语句,请尝试将if语句变为“else 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"]; 
} 
} 
+0

我发现我的其他如果错误直接发布后,但也不起作用。 – user1607001 2012-08-17 13:34:43

0

的原因是它不符合任何一个条件,selectedRowInComponent返回一个NSInteger,而不是一个布尔值。所以,你将不得不更新,如果条件包含的值,如

[selectedRowInComponent:1]==1 
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"]; 
} 
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:方法。

+0

这一个工作!谢谢! – user1607001 2012-08-18 10:12:43