Следующий фрагмент кода будет перехватывать жесты касания на UIPickerView
и определять, был ли касание в индикаторе выбора UIPickerView
:
Сначала мы добавим UITapGestureRecognizer
для перехвата жестов. Обратите внимание, что мы не хотим отменять касания, потому что UIPickerView
все равно должен делать то, что крутит колесо и все.
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer* gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pickerViewTapGestureRecognized:)];
gestureRecognizer.cancelsTouchesInView = NO;
[self.pickerView addGestureRecognizer:gestureRecognizer];
}
Во-вторых, мы проверим, был ли отвод в пределах индикатора выбора UIPickerView
(при условии, что индикатор выбора использует около 15% высоты UIPickerView
- возможно, вам придется настроить это значение) :
- (void)pickerViewTapGestureRecognized:(UITapGestureRecognizer*)gestureRecognizer
{
CGPoint touchPoint = [gestureRecognizer locationInView:gestureRecognizer.view.superview];
CGRect frame = self.pickerView.frame;
CGRect selectorFrame = CGRectInset( frame, 0.0, self.pickerView.bounds.size.height * 0.85 / 2.0 );
if( CGRectContainsPoint( selectorFrame, touchPoint) )
{
NSLog( @"Selected Row: %i", [self.currentArticles objectAtIndex:[self.pickerView selectedRowInComponent:0]] );
}
}
Вы должны НЕ реализовать
- (void)pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
, так как теперь мы сами определяем выбор.