UIPickerView を使用して、ユーザーがいくつかのオプションから選択できるようにしています。ピッカーを表示すると、最後に選択した行までスクロールします。
ユーザーが行を選択すると、常にピッカーを閉じたい (ユーザーが既に選択されている行をタップしても)、didSelectRow
メソッドでピッカーを閉じます。
問題は、ユーザーが選択した行を再選択すると、didSelectRow
メソッドが呼び出されないため、ピッカーを閉じることができない..
UIPickerView を使用して、ユーザーがいくつかのオプションから選択できるようにしています。ピッカーを表示すると、最後に選択した行までスクロールします。
ユーザーが行を選択すると、常にピッカーを閉じたい (ユーザーが既に選択されている行をタップしても)、didSelectRow
メソッドでピッカーを閉じます。
問題は、ユーザーが選択した行を再選択すると、didSelectRow
メソッドが呼び出されないため、ピッカーを閉じることができない..
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% 確信はありません。