1. #1
    Membre confirmé Avatar de Fooshi
    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2002
    Messages : 455
    Points : 230
    Points
    230

    Par défaut Transition entre deux UIViewController

    Bonjour,
    J'ai deux classes différentes qui heritent d'UIViewController

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @interface CriteriaViewController : UIViewController <UIScrollViewDelegate, UISearchBarDelegate, UIPopoverControllerDelegate, AssetServiceDelegate, UITableViewDataSource, UITableViewDelegate> {
    UITableView     * table_parent;
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @interface CriteriaSubController : UIViewController <UITableViewDelegate, UITableViewDataSource>{
        
       UITableView     * table_enfant;
        
    }
    Ces deux classes contiennent deux UITableView, lorsque je cliquer sur une ligne de la table parent, j'aimerais que la seconde classe s'initialise et qu'un effet de transition fasse apparaitre la deuxième tableview (enfant ).

    comment faire ? ce que je sais,c'est que c'est dans -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (NSIndexPath *) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    qu'il faut le faire.

    Merci d'avance

  2. #2
    Membre confirmé Avatar de Fooshi
    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2002
    Messages : 455
    Points : 230
    Points
    230

    Par défaut

    J'initialise la classe de mon second UIViewController puis j'utilise pushViewController mais ca ne fonctionne pas non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    (NSIndexPath *) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        NSUInteger  row = [indexPath    row];
        
        if(row  != 0){
            
            if(!self.subController){
                self.subController  = [[CriteriaSubController alloc] init];
            }
            [self.navigationController pushViewController:self.subController animated:YES];       
            [self.subController release];
           
            return indexPath;
        }
        return nil;
    }

    EDIT : self.navigationController est NULL ! mais pourquoi donc ? Cher journal, je continue mes investigations ...

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Expert iOS
    Inscrit en
    juin 2005
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : juin 2005
    Messages : 394
    Points : 1 404
    Points
    1 404

    Par défaut

    N'utilises pas des UIViewController mais des UITableViewController.

    Commences pas créer un UINavigationController dans lequel tu push ton premier UITableViewController. Dans la méthode didSelectRowAtIndexPath de ce dernier, push le deuxième UITableViewController.

  4. #4
    Membre confirmé Avatar de Fooshi
    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2002
    Messages : 455
    Points : 230
    Points
    230

    Par défaut

    En fait dans mon code le premier UIViewController n'est pas "poussé", il est deja initialisé et affiché "sous" la vue principale OverViewController qui est de type UIViewController elle aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @interface SplitViewController : UIViewController <OverViewDelegate, CriteriaChangeDelegate,AssetServiceDelegate>{
    
        IBOutlet UIView         *underView;
        IBOutlet UIView         *overView;
        BOOL                    isUnderVisible;
        CriteriaViewController  *underC;
        OverViewController      *overC;
        UIButton                *maskButton;
    }
    et c'est seulement dans le .m que la seconde vue est poussé sans pushcontoller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    -(BOOL)showUnderView {
        if (isUnderVisible) {
            [UIView animateWithDuration:0.5 animations:^{
                [overView setFrame:CGRectMake(0, overView.frame.origin.y, overView.frame.size.width, overView.frame.size.height)];
            }];
            [maskButton removeFromSuperview];
            [overC setUserInteractionEnable:YES];
            [underC closeKeyboard];
            isUnderVisible = NO;
        } else {
            [underC updateLocationSearch];
            [underC viewWillAppear:YES];
            maskButton.frame = CGRectMake(0,overC.topBarView.frame.size.height - 5,overC.view.frame.size.width, overC.view.frame.size.height - overC.topBarView.frame.size.height + 5);
            [overC.view addSubview:maskButton];
            [UIView animateWithDuration:0.5 animations:^{
                [overView setFrame:CGRectMake(offset, overView.frame.origin.y, overView.frame.size.width, overView.frame.size.height)];
            }];
            [overC setUserInteractionEnable:NO];
            isUnderVisible = YES;
        }
        return isUnderVisible;
    }
    c'est n'est pas moi qui ai fais le code et je suis un noob en objective c alors c'est pas encore simple pour moi a comprendre.

    ici les initialisation des 2 premiers vues "OverviewController" et "CriteriaViewController" dans le fichier SplitViewController.m :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        isUnderVisible  = NO;
        
        underC      = [[CriteriaViewController alloc]  initWithDelegate:self andFrame:CGRectMake(15, 0, self.view.frame.size.width, self.view.frame.size.height)];
        overC       = [[OverViewController alloc]   initWithNibName:@"OverViewController_iPhone" bundle:nil andDelegate:self];
        [underView setFrame:CGRectMake(15, 0, self.view.frame.size.width, self.view.frame.size.height)];
        [overView  setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
        [underView  addSubview:underC.view];
        [overView   addSubview:overC.view];
        maskButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
        maskButton.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.6];
        [maskButton addTarget:self action:@selector(showCriteria) forControlEvents:UIControlEventAllTouchEvents];
    }
    J'ai changé ma vue principale "SplitViewController" en "UiNavigationController" au lieu de "UIViewController" mais ca a planté.

    J'ai changé mes deux sous vues "CriteriaViewController" et "CriteriaSubController" en "UITableViewController" par contre,ca ne m'a pas jeté.

    Je galere depuis 2-3 jours sur ce probleme sans avancer

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Expert iOS
    Inscrit en
    juin 2005
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : juin 2005
    Messages : 394
    Points : 1 404
    Points
    1 404

    Par défaut

    Citation Envoyé par Fooshi Voir le message
    En fait dans mon code le premier UIViewController n'est pas "poussé", il est deja initialisé et affiché "sous" la vue principale OverViewController qui est de type UIViewController elle aussi
    Oui nan mais justement, il faut que tu commences pas créer un UINavigationController sur ta vue principale ou n'importe laquelle qu'il y a en dessous (d'après ce que j'ai compris, tu étais dans un UISplitViewController). Puis tu push ton premier UITableViewController dedans.
    Ensuite tu n'auras aucun problème à push le deuxième.

    Mais à part ça il faut que tu te documentes sérieusement sur tout ça. Tu ne vas pas galérer 2 ou 3 jours mais 2 ou 3 mois partis comme ça. Il faut que tu lises sérieusement la documentation Apple et notamment celle des classes que tu utilises. Regardes aussi les guides au sujet des view controllers.

    Pour te sortir de ton problème de UINavigationController et de UITableViewController tu peux t'inspirer du code d'exemple d'Apple situé ici : http://developer.apple.com/library/i...ion/Intro.html

    Mais pour le reste tu as besoin de reprendre toutes les bases du dev iOS.

  6. #6
    Membre confirmé Avatar de Fooshi
    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2002
    Messages : 455
    Points : 230
    Points
    230

    Par défaut

    Je lance ma derniere UIViewConroller comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     underC      = [[CriteriaSubController alloc]    initWithDelegate:delegateCriteriaChange andFrame:CGRectMake(15, 0, self.view.frame.size.width, self.view.frame.size.height)];
            [underView  setFrame:CGRectMake(15, 0, self.view.frame.size.width, self.view.frame.size.height)];
            underView.backgroundColor   = [UIColor colorWithRed:10 green:10 blue:10 alpha:10];
            [underView  addSubview:underC.view];
    Toutes les fonctions sont appelés (viewDidLoad, viewWillAppear, NumberOfRowsInSection qui me retourne le bon nombre d'element)
    mais la fonction cellForRowAtIndexPath n'est pas appelée.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo