iOS SDK - 发布更改UIPicker字体大小的问题。奇怪的行为

时间:2013-08-17 07:29:37

标签: ios cocoa-touch conditional uipickerview

我无法理解为什么这段代码不起作用

我正在使用此委托方法来调整字体大小(我不打扰显示,因为它不相关)

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;

这是一个多选择器。我有三个组成部分。当我使用else使用条件语句运行代码时,它使第0部分匹配第2部分。我无法解释这个

NSLog(@"%i", component); // only prints, 0, 1, 2
NSString *theString = @"";
if(component == 0){
    theString = [_phosType objectAtIndex:row];
}
if(component == 1){
    theString = [_quantity objectAtIndex:row];
} else {                                        // THIS CAUSES PROBLEMS.
    theString = [_units objectAtIndex:row];
}
pickerViewLabel.text = theString;

这个有用......给出了什么!

NSLog(@"%i", component); // only prints, 0, 1, 2
NSString *theString = @"";
if(component == 0){
    theString = [_phosType objectAtIndex:row];
}
if(component == 1){
    theString = [_quantity objectAtIndex:row];
}

if(component == 2){                            // THIS WORKS!  BUT WHY?!
    theString = [_units objectAtIndex:row];
}
pickerViewLabel.text = theString;

为什么我需要明确询问组件是否为2?我可以看到我的NSLog组件,它永远不会等于0 1或2以外的任何东西。我在代码中的其他地方使用'else'并遇到问题。谁能解释一下呢?

1 个答案:

答案 0 :(得分:0)

如果component=0检查此if语句中发生了什么:

if(component == 1){
    theString = [_quantity objectAtIndex:row];
}
else {                                       
   theString = [_units objectAtIndex:row];
}

您可以看到else块将被执行,因为它会将if(component == 1)评估为false,否则将执行block。 但如果component=0此块也将被执行:

if(component == 0){
    theString = [_phosType objectAtIndex:row];
}

因此,component=0 theString将被设置两次:在第一个if块和else块中。最终theString值将是else块中设置的值。

请改为尝试:

if(component == 0){
    theString = [_phosType objectAtIndex:row];
}
else if(component == 1){
    theString = [_quantity objectAtIndex:row];
}
else {                         
    theString = [_units objectAtIndex:row];
}