0

Aster me trouvant dans la situation de vouloir désactiver un composant UIPickerView et ne trouvant aucune réponse qui utilise la fonctionnalité par défaut mais essaye de contourner le problème en utilisant des étiquettes ou plusieurs UIPickerViews, je commence à piquer autour de la structure UIPickerView afin de trouver un approche plus directe pour résoudre le problème en utilisant la fonctionnalité déjà présente OS.Comment désactiver correctement le défilement des composants UIPickerView?

Répondre

1

Voilà donc ma réponse, que j'ai trouvé par essais et erreurs, et la façon dont je l'utilise:

La méthode:

- (void)dissableUIPickerViewComponent:(int)componentToDissable forPickerView:(UIPickerView *)pickerView{ 

    NSArray *pickerViews = [[NSArray alloc] initWithArray:[pickerView subviews]]; 
    UIView *mainSubview; 
    for (int count = 0; count < pickerViews.count; count++) { 
     UIView *temp = [pickerViews objectAtIndex:count]; 
     if (temp.frame.size.height > 100) { 
      mainSubview = temp; 
     } 

    } 

    NSArray *componentSubview = [mainSubview subviews]; 
    while ([[[[componentSubview objectAtIndex:componentToDissable] subviews] firstObject] superview].gestureRecognizers.count) { 
     [[[[[componentSubview objectAtIndex:componentToDissable]subviews]firstObject]superview] removeGestureRecognizer:[[[[[componentSubview objectAtIndex:componentToDissable]subviews]firstObject]superview].gestureRecognizers objectAtIndex:0]]; 
    } 

} 

Meilleur endroit pour appeler:

- (void)viewDidAppear:(BOOL)animated{ 
    [self dissableUIPickerViewComponent:0 myPickerView]; 
} 

J'espère que ceux-ci aideront les autres qui se sont retrouvés dans la même position que moi :)

+1

Il est mauvais de contourner la hiérarchie de vue des contrôles système et de rompre avec la future mise à jour du système. –