IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

Transition entre deux UIViewController


Sujet :

Objective-C

  1. #1
    Membre averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    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 averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    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

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

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : Juin 2005
    Messages : 413
    Points : 1 619
    Points
    1 619
    Billets dans le blog
    1
    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 averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    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

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

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : Juin 2005
    Messages : 413
    Points : 1 619
    Points
    1 619
    Billets dans le blog
    1
    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 averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    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.

Discussions similaires

  1. Transition entre deux écrans
    Par miya dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 01/03/2010, 10h17
  2. Effet de transition entre deux images
    Par erehcab dans le forum jQuery
    Réponses: 5
    Dernier message: 17/02/2010, 10h02
  3. transition entre deux views
    Par hzaioua dans le forum Flex
    Réponses: 0
    Dernier message: 18/03/2009, 13h54
  4. transition entre deux pages (préchargement de la deuxième page)
    Par bitbis dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/11/2007, 10h12
  5. transition entre deux animations
    Par Adren dans le forum Flash
    Réponses: 5
    Dernier message: 18/07/2006, 22h03

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