我发现了类似的问题here和here。我已经尝试了在stackoverflow和Apple开发者论坛上找到的这些和其他问题的答案,但没有运气。
我创建了一个新项目来测试它,它在新项目中运行良好。我正在迭代地消除我的新测试项目与展示此问题的项目之间的差异。任何指针都会非常有用。
我有一个UIPickerView
连接到我的视图控制器。我想将UIPickerView
初始化为用户选择的最后一个值。但是,如果此行是选择器中的最后一行,则会显示在UI中选择的倒数第二行。
同时,日志记录显示在UIPickerView
对象实例中选择的正确行索引。
选择拾取器中最后一行之外的任何行都可以正常工作。
我尝试从selectRow:inComponent:animated
,viewDidLoad
和viewWillAppear
调用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
以下是选择错误行的屏幕截图:
这是使用iOS6,XCode 4.6.1。
有什么想法吗?