Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre confirmé Avatar de Fooshi
    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    442
    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 : 442
    Points : 221
    Points
    221

    Par défaut Transition entre deux UIViewController

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

    Code :
    1
    2
    3
    @interface CriteriaViewController : UIViewController <UIScrollViewDelegate, UISearchBarDelegate, UIPopoverControllerDelegate, AssetServiceDelegate, UITableViewDataSource, UITableViewDelegate> {
    UITableView     * table_parent;
    }
    et

    Code :
    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 :
    (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
    442
    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 : 442
    Points : 221
    Points
    221

    Par défaut

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

    Code :
    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
    390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : juin 2005
    Messages : 390
    Points : 1 391
    Points
    1 391

    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
    442
    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 : 442
    Points : 221
    Points
    221

    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 :
    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 :
    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 :
    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
    390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : juin 2005
    Messages : 390
    Points : 1 391
    Points
    1 391

    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
    442
    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 : 442
    Points : 221
    Points
    221

    Par défaut

    Je lance ma derniere UIViewConroller comme ceci :
    Code :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •