Précédent   Forum du club des développeurs et IT Pro > Systèmes > Mac > Objective-C
Objective-C Forum d'entraide sur le langage de programmation Objective-C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 31/01/2013, 09h55   #1
Fooshi
Membre habitué
 
Avatar de Fooshi
 
Homme
Inscription : juin 2002
Messages : 389
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 : 389
Points : 133
Points : 133
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
Fooshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2013, 11h49   #2
Fooshi
Membre habitué
 
Avatar de Fooshi
 
Homme
Inscription : juin 2002
Messages : 389
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 : 389
Points : 133
Points : 133
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 ...
Fooshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2013, 01h09   #3
chiv
Rédacteur
 
Homme
Expert iOS
Inscription : juin 2005
Messages : 218
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Expert iOS

Informations forums :
Inscription : juin 2005
Messages : 218
Points : 700
Points : 700
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.
chiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2013, 09h24   #4
Fooshi
Membre habitué
 
Avatar de Fooshi
 
Homme
Inscription : juin 2002
Messages : 389
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 : 389
Points : 133
Points : 133
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
Fooshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2013, 16h35   #5
chiv
Rédacteur
 
Homme
Expert iOS
Inscription : juin 2005
Messages : 218
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Expert iOS

Informations forums :
Inscription : juin 2005
Messages : 218
Points : 700
Points : 700
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.
chiv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2013, 11h24   #6
Fooshi
Membre habitué
 
Avatar de Fooshi
 
Homme
Inscription : juin 2002
Messages : 389
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 : 389
Points : 133
Points : 133
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.
Fooshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h39.


 
 
 
 
Partenaires

Hébergement Web