Rien ne se passe au clic sur mon bouton

Bonjour,


J'ai l'impression que rien ne se passe au clic sur mon bouton, que ça soit "Annuler" ou "Valider", alors qu'il y a pourtant bien des actions dans ces boutons.


 


J'ai beau eu chercher toute la matinée j'ai toujours pas trouvé d'ou venait le souci. Une ame charitable pourrait elle m'indiquer la voie s'il vous plait ?



self.myPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 300, 0, 0)];
self.myPickerView.backgroundColor=[UIColor whiteColor];
myPickerView.showsSelectionIndicator = YES;
myPickerView.dataSource = self;
myPickerView.delegate = self;

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
toolBar.barStyle = UIBarStyleDefault;

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@Valider style:UIBarButtonItemStyleDone target:self action:@selector(doneTouched:)];

UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@Annuler style:UIBarButtonItemStyleDone target:self action:@selector(cancelTouched:)];

[toolBar setItems:[NSArray arrayWithObjects:cancelButton, [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneButton, nil]];

self.itemsPickerView = [self listeSuivi];

[myPickerView addSubview:toolBar];

Réponses

  • AliGatorAliGator Membre, Modérateur
    Ouch...

    Alors déjà  quand je vois des Magic Numbers partout, ça me fait mal aux yeux et j'ai failli arrêter de lire...

    Ensuite, ajouter une toolBar en subview à  un UIPickerView : très mauvaise idée. un UIPickerView n'est pas un composant qui a été pensé pour qu'on y ajoute des subviews, d'autant qu'il gère lui-même ses interactions (swipe sur les molettes pour les faire tourner, etc) et doit certainement donc intercepter tous les taps sans les passer à  ses subviews, d'où le comportement que tu observes.

    Mets ta toolBar à  l'extérieur de ton picker, en subview de ta vue principale de ton ViewController par exemple, mais certainement pas en subview de ta toolbar !!
  • Jean75Jean75 Membre
    novembre 2014 modifié #3

    Ok merci


  • Ali, pourrais-tu expliquer ce que tu entends par Magic Numbers et pourquoi tu n'aimes pas ça ?


     


    Merci.


  • CéroceCéroce Membre, Modérateur
    Les Magic Numbers sont des constantes numériques écrites "en dur" comme on dirait en français.
    Exemple:
    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    Le premier problème est celui de la signification: d'où sortent ces fichus nombres ?
    Une première version corrigée:


    const CGFloat ScreenWidth=320.0;
    const CGFloat ToolBarHeight=44.0;
    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ToolBarHeight)];
    On remarquera que définir des constantes permet par ailleurs de les réutiliser...

    Le deuxième problème est que la taille de l'écran d'iPhone n'est pas connue lors du codage, puisque les iPhone 4, 5, 6 et 6+ disposent d'écrans de tailles différentes. Il faut donc plutôt déterminer quelle est la taille de la vue parente, ou beaucoup mieux, utiliser l'autoresizing ou l'autolayout pour adapter la frame de la vue en fonction de sa disposition dans la vue parente.
  • Merci pour ces explications Céroce.  On les voit beaucoup sur internet dans des exemples de code, ces magic numbers, et du coup ça ne m'avait pas frappé que ça manquait de bon sens.  


Connectez-vous ou Inscrivez-vous pour répondre.