UIPickerView selectRow在初始化期间不会选择最后一行

时间:2013-06-08 11:16:48

标签: ios ios6 uipickerview

我发现了类似的问题herehere。我已经尝试了在stackoverflow和Apple开发者论坛上找到的这些和其他问题的答案,但没有运气。

我创建了一个新项目来测试它,它在新项目中运行良好。我正在迭代地消除我的新测试项目与展示此问题的项目之间的差异。任何指针都会非常有用。

我有一个UIPickerView连接到我的视图控制器。我想将UIPickerView初始化为用户选择的最后一个值。但是,如果此行是选择器中的最后一行,则会显示在UI中选择的倒数第二行。

同时,日志记录显示在UIPickerView对象实例中选择的正确行索引。

选择拾取器中最后一行之外的任何行都可以正常工作。

我尝试从selectRow:inComponent:animatedviewDidLoadviewWillAppear调用viewDidAppear方法 - 这些都没有任何区别。我也试过在行选择和数据初始化的各种命令中调用reloadAllComponents - 再次,没有区别。

一些代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSParameterAssert(self.pickerView);

    // Set pickerView data
    self.pickerOptions = @[@"zero", @"one", @"two", @"three", @"four"];

    // Picker View config
    self.pickerView.dataSource = self;
    self.pickerView.delegate = self;
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSInteger selectedIndex = ([self.pickerOptions count] -1);
    NSLog(@"About to select row: %d", selectedIndex);
    [self.pickerView selectRow:selectedIndex inComponent:0 animated:NO];
    NSLog(@"Selected value is %d", [self.pickerView selectedRowInComponent:0]);
}

#pragma mark UIPickerViewDataSource

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    NSInteger numRows = [self.pickerOptions count];
    NSLog(@"numRows: %d", numRows);
    return numRows;
}

#pragma mark UIPickerViewDelegate

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    NSString *rowTitle =  [self.pickerOptions objectAtIndex:(NSUInteger)row];
    return rowTitle;
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSString *value = [self.pickerOptions objectAtIndex:(NSUInteger)row];
    NSLog(@"User selected value: %@", value);
    NSLog(@"index: %d", row);
}

日志输出:

  

- [CCSelectorViewController viewDidAppear:]即将选择行索引:4
   - [CCSelectorViewController pickerView:numberOfRowsInComponent:] numRows:5
   - [CCSelectorViewController viewDidAppear:]所选行索引为4

以下是选择错误行的屏幕截图:

http://imgur.com/FVvu9RA

这是使用iOS6,XCode 4.6.1。

有什么想法吗?

0 个答案:

没有答案