1

UIPickerView を使用して、ユーザーがいくつかのオプションから選択できるようにしています。ピッカーを表示すると、最後に選択した行までスクロールします。

ユーザーが行を選択すると、常にピッカーを閉じたい (ユーザーが既に選択されている行をタップしても)、didSelectRowメソッドでピッカーを閉じます。

問題は、ユーザーが選択した行を再選択すると、didSelectRowメソッドが呼び出されないため、ピッカーを閉じることができない..

4

1 に答える 1

2

1 つの解決策は、UIPickerView のサブクラスを作成し、touchesEnded:withEvent:メソッドをオーバーライドすることです。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    // dismiss the picker view here, either directly, or you could notifiy
    // the delegate with a custom message:
    if ([self.delegate respondsToSelector:@selector(pickerViewShouldDismiss:)]) {
        [self.delegate pickerViewShouldDismiss:self];
    }
}

UITapGestureRecognizerまたは、 に を追加することもできますUIPickerView:

UITapGestureRecognizer *tapGR = [UITapGestureRecognizer alloc] initWithTarget:self
                                 action:@selector(pickerViewTapped];
[pickerView addGestureRecognizer:tapGR];

その後:

- (void)pickerViewTapped {
    // dismiss the picker.
}

UIPickerViewこれがタップの処理方法に干渉することはありませんが、100% 確信はありません。

于 2012-08-26T15:42:17.917 に答える