UITapGestureRecognizer *tapgesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(whereAreYouTappedOnPicker:)]; [self.pickerView addGestureRecognizer:tapgesture];
-(void)whereAreYouTappedOnPicker:(UIGestureRecognizer *)gestureRecognizer { // UIPickerView CGPoint tapCoordinate = [gestureRecognizer locationInView:self.pickerView]; // UIPickerView. 5 CGFloat heightOfPickerRow = self.pickerView.frame.size.height/5; // NSInteger rowForSelectionIndicator =[self.pickerView selectedRowInComponent:0]; // "Selection Indicator" if (tapCoordinate.y<heightOfPickerRow) { // // if ([self.pickerView selectedRowInComponent:0] > 1) rowForSelectionIndicator -=2; else rowForSelectionIndicator = -1; // } else if (tapCoordinate.y<2*heightOfPickerRow) { // // if ([self.pickerView selectedRowInComponent:0] > 0) rowForSelectionIndicator -=1; else rowForSelectionIndicator = -1; // } else if (tapCoordinate.y<3*heightOfPickerRow) { // , "Selection Indicator" // , rowForSelectionIndicator = [self.pickerView selectedRowInComponent:0]; } else if (tapCoordinate.y<4*heightOfPickerRow) { // // if ([self.pickerView selectedRowInComponent:0] < ([self.pickerView numberOfRowsInComponent:0]-1)) rowForSelectionIndicator +=1; else rowForSelectionIndicator = -1; // } else { // // if ([self.pickerView selectedRowInComponent:0] < ([self.pickerView numberOfRowsInComponent:0]-2)) rowForSelectionIndicator += 2; else rowForSelectionIndicator = -1; // } // - if (rowForSelectionIndicator!=-1) { // // - didSelectRow . [self.pickerView selectRow:rowForSelectionIndicator inComponent:0 animated:YES]; // [self customPickerView:self.pickerView didSelectRow:rowForSelectionIndicator inComponent:0 asResultOfTap:YES]; } }
- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { [self customPickerView:pickerView didSelectRow:row inComponent:component asResultOfTap:NO]; }
-(void)customPickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component asResultOfTap:(bool)userTapped;
- (void)customPickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component asResultOfTap:(bool)userTapped { if (userTapped) // { NSLog(@" %i", row); } else // "Selection Indicator" { NSLog(@" %i", row); } }
Source: https://habr.com/ru/post/142796/
All Articles