UITableViewController et sous-vues

Bonjour,


 


J'ai rencontré un petit problème que je vais essayer de vous expliquer: dans mon UITableViewController j'ai ajouté via le code un Segmented Control (ou plutôt HMSegmentedControl) mais j'aimerais que celui-ci soit fixe. En effet, pour l'instant lorsque je scrolle ma TableView, mon élément scrolle aussi. Je suppose qu'il ne faut pas qu'il soit une sous-vue de ma TableView dans ce cas mais je ne sais pas comment faire sachant que c'est la seule vue....


 


J'espère que vous m'avez compris :* .


Merci d'avance,


Flow


Réponses

  • Hello,


     


     




    Je suppose qu'il ne faut pas qu'il soit une sous-vue de ma TableView dans ce cas mais je ne sais pas comment faire sachant que c'est la seule vue....




     


    Tu crées une vue principale qui va contenir le segmentedControl et la tableView. 


  • Je suis désolé mais je n'y arrive pas... J'ai essayé cela:



    UIViewController *maVueController = [[UIViewController alloc] init];
    UIView *maVue = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.tableView.frame.size.height)];
    [self addChildViewController:maVueController];
    [maVueController setView:maVue];
    [maVue addSubview:self.tableView];
    HMSegmentedControl *segmentedControl = [[HMSegmentedControl alloc] initWithSectionTitles:@[;@À la une, @Tests, @Astuces]];
    segmentedControl.frame = CGRectMake(0, 0, 320, 40);
    segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
    segmentedControl.selectionIndicatorLocation = HMSegmentedControlSelectionIndicatorLocationDown;
    segmentedControl.selectionIndicatorColor = UIColorFromRGB(0x46A28D);
    segmentedControl.selectionIndicatorHeight = 2;
    segmentedControl.selectedTextColor = UIColorFromRGB(0x46A28D);
    segmentedControl.font = [UIFont systemFontOfSize:15.0];
    [segmentedControl addTarget:self action:@selector(segmentedControlChangedValue:) forControlEvents:UIControlEventValueChanged];
    [maVue addSubview:segmentedControl];

    Ma TableView s'affiche mais pas mon SegmentedControl...


     


    Merci de ta réponse ;)


  • Il faut juste ajouter tes vues à  la vue principale avec les bonnes positions. Si tu travailles avec des xibs ce sera plus facile pour toi :).


     


    Moi je ferais comme ça :  



    HMSegmentedControl *segmentedControl = [[HMSegmentedControl alloc] initWithSectionTitles:@[;@À la une, @Tests, @Astuces]];
    segmentedControl.frame = CGRectMake(0, 0, 320, 40);..
    [self.view addSubView:segmentedControl];

    // il faut placer la tableView juste après le segmentedControl
    self.tableView.frame = CGRectMake(0,segmentedControl.frame.position.y + segmentedControl.frame.size.height ,self.tableView.frame.size.width,self.tableView.frame.size.height );
    [[self.view addSubView:self.tableView];
  • Le problème c'est que j'ai un TableViewController et la vue principale est donc ma TableView


  • Joanna CarterJoanna Carter Membre, Modérateur
    Donc, changes le pour un UIViewController. En plus, pourquoi pas utilisez un XIB ou storyboard ?
  • D'accord :).


     


    J'utilise un storyboard mais avec un storyboard je ne peux pas gérer mon HMSegmentedControl, si ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    juillet 2014 modifié #8
    Mais si. Tu peux ajouter l'implementation de n'importe quel protocole délégué à  ta sous-classe de UIViewController
  • Bon, merci à  tous j'ai changé pour un UIViewController et ça marche :)


     


    Par contre, je n'ai pas réussi à  gérer mon HMSegmentedControl avec mon storyboard...


  • Joanna CarterJoanna Carter Membre, Modérateur
    juillet 2014 modifié #10
    Avant de Xcode 6, il n'est pas possible de gérer les custom controls, soit en storyboard ou xib. On peut le poser et l'agencer mais il faudrait le connecter en code
  • AliGatorAliGator Membre, Modérateur

    Avant de Xcode 6, il n'est pas possible de gérer les custom controls, soit en storyboard ou xib. On peut le poser et l'agencer mais il faudrait le connecter en code

    Si si, on peut même avec Xcode5 :)

    Tu places une UIView dans ton XIB ou Storyboard, tu changes sa classe en HMSegmentedControl dans le panneau d'inspection à  droite, et basta.

    Ce qu'on n'a pas avec Xcode5, mais qu'on a avec Xcode6, c'est :
    • Le rendu en temps réel du composant : avec Xcode5, ça restera une vue blanche quand tu la visualises dans ton XIB, tu ne verras le vrai HMSegmentedControl qu'au runtime " avec Xcode6, et seulement si le composant en question l'a prévu avec le mot clé @IBDesignable et a packagé son composant dans un framework, alors tu verras le rendu du composant même dans ton XIB pendant l'édition de ton UI
    • Le réglage des valeurs de propriétés propres à  ton composant directement depuis IB : avec Xcode5 tu ne verras que les propriétés propres à  une UIView dans ton inspecteur dans le panneau de droite. Si le composant (ici un HMSegmentedControl) a d'autres propriétés additionnelles propres à  lui et pas à  UIView, genre le nombre de segments, etc, ils ne seront pas visibles dans IB et il faudra les affecter par code. Avec Xcode5, et seulement si le composant en question l'a prévu avec le mot clé @IBInspectable et a packagé son composant dans un framework, alors tu pourras voir ces propriétés dans ton inspecteur à  droite et en affecter des valeurs.
    Mais à  part ces 2 points là  (rendu en temps réel pendant l'édition, et possibilité d'affecter des propriétés propres au composant), ça n'empêche pas de configurer le reste de ton composant depuis IB. Par exemple affecter son delegate s'il a une "@property id<...> IBOutlet delegate;", etc
  • D'accord, je viens d'apprendre un truc :D


     


    Merci à  tous :)


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