UIPicker noob问题 - 如果我点击选择器中的第一项,结果为空 - 所有其他项都没问题

时间:2011-02-26 04:17:26

标签: iphone objective-c uipickerview

我有一个包含7个项目的UIPicker。 (只有一个组件)...如果我点击选择器中的第一个项目(没有任何选择器的滚动),我得到的文本结果为空。

但是,如果我在列表中向下“拖拽”并且那么点击项目#1就可以正常工作。

如果我点击任何其他项目,它总会返回正确的结果。当然,列表必须滚动才能选择这些项目。

导致这种情况的原因是什么?我需要调用一个委托函数吗?有没有办法将选择默认为列表中的第一项,如果它们从不点击任何内容?

谢谢,

菲尔

以下是我的.m

中“viewdidload”的摘录
    - (void)viewDidLoad {
        [super viewDidLoad];

        NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

        listOfTerms=[[NSArray alloc]initWithObjects:
                     @"Fall Semester",@"Spring Semester",@"Summer Session",@"Q1",@"Q2",@"Q3",@"Q4",nil];
...
...

以下是我定义的其他4个UIPickerView委托函数。

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}




- (NSInteger)pickerView:(UIPickerView *)pickerView 
numberOfRowsInComponent:(NSInteger)component {
        return [listOfTerms count];

}





-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
        return [listOfTerms objectAtIndex:row];
}





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

    selectedTerm =[[NSString alloc] 
                       initWithFormat:@"%@",
                       [listOfTerms objectAtIndex:row]];

}

2 个答案:

答案 0 :(得分:5)

只有在选择器视图滚动时才会调用

pickerView:didSelectRow:inComponent:。因此,如果您从不滚动视图,则永远不会调用该方法,因此永远不会设置selectedTerm。修复很简单,在viewDidLoad:初始化selectedTerm。

答案 1 :(得分:1)

对于所有情况,最简单的答案是暗示 viewDidAppear

中的didSelectRow

(请注意,它不是 viewDidLoad 方法)

- (void) viewDidAppear:(BOOL)animated{ 
    [self pickerView:[self yourpickerview] didSelectRow:0 inComponent:0;
}