2

我有以下带有 2 个组件的选择器代码:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component {
if (component == 0) {
    NSLog(@"first");
}
else
{
    NSLog(@"second");
}
}

问题是当用户尝试先滚动组件 0 并等待它完全停止之前,然后同时滚动组件 1。

那么我将只有“第二”的控制台日志。所以看起来第一个事件被第二个事件覆盖了。

有没有办法让我们等待选择器滚动事件自行完成?

谢谢。

4

1 回答 1

2

尝试让双组件 UIPickerView 工作时,我遇到了同样的问题。正如有人建议的那样,不要使用 if 语句。

而是这样做:

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    self.valueA = [self.valuePickerView selectedRowInComponent:0];
    self.valueB = [self.valuePickerView selectedRowInComponent:1];

    self.valueLabel.text = [NSString stringWithFormat:@"%i:%i", self.valueA, self.valueB];
}

当然,如果您正在寻找数组的元素,只需使用“objectAtIndex:selectedRowInComponent:0”


不要这样做:

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if(component == 0){
        self.valueA = ...;
    }
    else if (component == 1){
        self.valueB = ...;
    }

    self.valueLabel.text = [NSString stringWithFormat:@"%i:%i", self.valueA, self.valueB];
}

希望这可以帮助其他为此苦苦挣扎的人。

于 2012-09-17T19:02:02.010 回答