2

2 つのコンポーネントを持つピッカーの以下のコードがあります。

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

問題は、ユーザーが最初にコンポーネント 0 をスクロールしようとし、それが完全に停止するのを待つ前に、同時にコンポーネント 1 をスクロールすることです。

次に、「second」のコンソールログのみが表示されます。したがって、最初のイベントが 2 番目のイベントによってオーバーライドされたようです。

ピッカーのスクロール イベントが完了するのを待つ方法はありますか?

ありがとう。

4

1 に答える 1

2

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 に答える