2010-04-08 7 views
0

Cas 1:Chargement dynamique des vues

J'ai créé un exemple d'application basé sur View et j'ai essayé de l'exécuter sous le code. Quand j'appuie sur le bouton "Job List", il faut charger une autre vue avec "Back Btn" dessus.

En fonction de test, si j'utilise

[self.navigationController pushViewController:jbc animated:YES]; 

rien ne se charge,

mais si j'utilise

[self presentModalViewController:jbc animated:YES]; 

il charge une autre vue haveing ​​"Retour Btn" sur elle.

Cas n ° 2:

J'ai créé un autre Applicaton de navigation à et utilisé

[self.navigationController pushViewController:jbc animated:YES]; 

cela a fonctionné comme je le voulais. Est-ce que quelqu'un peut expliquer pourquoi cela ne fonctionnait pas dans le cas 1. Cela a-t-il quelque chose à voir avec le type de projet qui est sélectionné?

@interface MWViewController : UIViewController { 

} 

-(void) test; 

@end 

@interface JobViewCtrl : UIViewController { 

} 

@end 

@implementation MWViewController 

(void)viewDidLoad { 

UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

btn.frame = CGRectMake(80, 170, 150, 35); 

[btn setTitle:@"Job List!" forState:UIControlStateNormal]; 

[btn addTarget:self action:@selector(test) 

     forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btn]; 

[super viewDidLoad]; } 

-(void) test 

{ 

JobViewCtrl* jbc = [[JobViewCtrl alloc] init]; 

[self.navigationController pushViewController:jbc animated:YES]; //[self presentModalViewController:jbc animated:YES]; 

[jbc release]; 
} 

(void)dealloc { 

[super dealloc]; 

} 

@end 

@implementation JobViewCtrl 

-(void) loadView 

{ 

self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 

self.view.backgroundColor = [UIColor grayColor]; 

UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

btn.frame = CGRectMake(80, 170, 150, 35); 

[btn setTitle:@"Back Btn!" forState:UIControlStateNormal]; 

[self.view addSubview:btn]; 

} 

@end 

Répondre

0

La réponse réside en ce que dans les applications à base de navigation du contrôleur de vue parent de toutes les nouvelles vues à l'exception des points de vue modal est UINavigationController. Qui a une barre de navigation de propriété, qui à son tour a le bouton de retour de la propriété. Maintenant, lorsque vous appuyez sur une vue dans une application basée sur la navigation, un bouton de retour est affiché par défaut à gauche de la barre de navigation. Maintenant, dans l'application basée sur la vue, il n'existe pas de contrôleur de navigation tel que le contrôleur de vue parent des vues ur. Dans ce type d'application, les vues sont ajoutées une par une au-dessus de l'autre. La vue de dessus se comporte comme la sous-vue de la vue sous-jacente. D'où pas de concept de barre de navigation donc pas de bouton retour. Je crains que vous soyez capable de voir une vue modale, (si vous n'ajoutez pas un contrôleur de navigation par vous-même, vous pouvez voir si vous avez ajouté un contrôleur de navigation par vous-même, mais la situation serait la même cet endroit comme dans mon premier point) dans une application basée sur la vue.

Merci,

Madhup

0

créer d'abord votre contrôleur de vue racine & puis utilisez le contrôleur poussoir vue ...

0

Récemment, je suis venu avec le même problème que vous commentez. Et je l'ai résolu. Veuillez vous assurer qu'avant d'utiliser [self navigationController], il n'est pas nul.Supposons que « soi » est viewController A, alors vous devriez traiter les éléments suivants:

dans votre délégué de l'application, vous devez initialiser un contrôleur de navigation comme ceci:

UINavigationController *m_controller; 
m_controller = [[UINavigationController alloc] initWithRootViewController: viewController A]; 

puis ajoutez la vue du contrôleur de navigation à la fenêtre et rendre visible comme ceci:

[window addSubView:m_controller.view]; 

dernier, souvenez-vous de libérer m_controller.

[m_controller release]; 

Enfin, le code suivant fonctionne bien:

[self.navigationController pushViewController:jbc animated:YES]; 

Eh bien, félicitations, le casse-tête est parti.

Questions connexes