我在这里和这里发现了类似的问题。我已经尝试在 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。
有任何想法吗?