рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ UIPickerView рдореЗрдВ рдХрд┐рд╕ рдкрдВрдХреНрддрд┐ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рд╕рдорд╕реНрдпрд╛

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ UIPickerView рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ рдмрд╣реБрдд рд╕реВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдореБрдЭреЗ рдЙрдкрдХрд░рдг рдХрд╛ рдПрдХ рдорд╛рдирдХ рд╕реЗрдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреН: рдЗрд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рддрддреНрд╡ "рдЪрдпрди рд╕рдВрдХреЗрддрдХ" рдХреЗ рддрд╣рдд рд╣реЛ рдЬрд╛рдП рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВред рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рд▓рд╛рдЗрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рдПред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ UITapGestureRecogniser рдХреЛ рд╕реНрдХреНрд░реВ рдХрд░рдХреЗ UIPickerView рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

рдирд┐рд░реНрдгрдп

рдиреАрдЪреЗ рдореИрдВ рдЪрд░рдг рджрд░ рдЪрд░рдг рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдореИрдВ UIViewController рдХреЗ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ UIPickerViewDelegate рдФрд░ UIPickerViewDataSource рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

  1. UIPickerView рдореЗрдВ UITapGestureRecogniser рдЬреЛрдбрд╝реЗрдВ:

    UITapGestureRecognizer *tapgesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(whereAreYouTappedOnPicker:)]; [self.pickerView addGestureRecognizer:tapgesture]; 


    рдореИрдВрдиреЗ рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рджреГрд╢реНрдпрдбрд╛рд▓рдбреИрдб: рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреАред whereAreYouTappedOnPicker: - рдпрд╣ рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рддрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдкрд┐рдХрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдХрд┐рд╕ рд▓рд╛рдЗрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

  2. рд╣рдо рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╣рд╛рдВ рд╣реИрдВ рдЖрдк рдЯреИрдк рдХрд┐рдП рдЧрдП рд╡рд┐рдХрд░: UIView.ontroller рдХреЗ рдЕрдкрдиреЗ рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд╣реЗрдбрд░ (.h рдлрд╝рд╛рдЗрд▓) рдореЗрдВред

    - (рд╢реВрдиреНрдп) рдЬрд╣рд╛рдБ AAYouTappedOnPicker: (UIGestureRecognizer *) gestureRecognizer;

  3. рд╣рдо рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╣рдо рдЗрд╕реЗ .m рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ)ред

     -(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]; } } 


    рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рджреЛ рдорд╛рдорд▓реЗ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд┐рдХрд░ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдВрдЫрд┐рдд рд▓рд╛рдЗрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рддрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрд┐ didSelectRow: рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рд╣рдореЗрдВ "рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

    рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рджреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЛрдВрдЧреЗ:
    1. рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд┐рдХрд░ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИ, didSelectRow: рдкрджреНрдзрддрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ customPickerView: рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ "рдЪрдпрди рд╕рдВрдХреЗрддрдХ" рдХреЗ рддрд╣рдд рдЖрдиреЗ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
    2. рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдВрдЫрд┐рдд рдкрдВрдХреНрддрд┐ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ aAreYouTappedOnPicker: рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ customPickerView: рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЙрд╕рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    DidSelectRow рд╡рд┐рдзрд┐ рдХреЛрдб:

     - (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { [self customPickerView:pickerView didSelectRow:row inComponent:component asResultOfTap:NO]; } 


  4. рд╣рдо customPickerView рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ: рд╣реЗрдбрд░ рдореЗрдВред

     -(void)customPickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component asResultOfTap:(bool)userTapped; 


  5. рд╣рдо customPickerView рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ: .m рдлрд╝рд╛рдЗрд▓ рдореЗрдВ

     - (void)customPickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component asResultOfTap:(bool)userTapped { if (userTapped) //       { NSLog(@"  %i", row); } else //       "Selection Indicator"   { NSLog(@" %i", row); } } 


рд╕рдорд╕реНрдпрд╛рдУрдВ

рдХрднреА-рдХрднреА, рдЬрдм рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдкрд┐рдХрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪрдпрдирд┐рдд рд░реЛ -1 рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдПрдХ рдирдП рджреГрд╢реНрдп рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдореБрдЭреЗ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In142796/


All Articles