0

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

我创建了一个新项目来测试它,它在那个新项目中运行良好。我正在反复消除我的新测试项目与出现此问题的项目之间的差异。任何指针都是最有帮助的。

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

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

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

我尝试从 、 和 - 调用该方法,这些selectRow:inComponent:animated都没有任何区别。我也尝试过调用与行选择和数据初始化相关的各种顺序——同样,没有区别。viewDidLoadviewWillAppearviewDidAppearreloadAllComponents

一些代码:

- (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。

有任何想法吗?

4

0 回答 0