2010-06-04 13 views
0

Je vais avoir un problème à faire une application universelle ... Dans le délégué de l'application, je mis en place la navigation principale pour iPad et iPhone:présentant une vue modale sur une SPLITVIEW

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
window = [[UIWindow alloc] initWithFrame:[ [UIScreen mainScreen] bounds]]; 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
// The device is an iPad running iPhone 3.2 or later. 
    [self putSplitView]; 
} else { 
    [self putTabBar]; 
} 
[window makeKeyAndVisible]; 
return YES; 
} 

- (void)putSplitView { 
RootiPadViewController *rootiPadViewController = [[RootiPadViewController alloc] init]; 
UISplitViewController *splitController = [[UISplitViewController alloc] init]; 
splitController.viewControllers = [NSArray 
     arrayWithObjects:rootiPadViewController.seccionesView, 
         rootiPadViewController.noticiasView, 
         nil]; 
    [window addSubview:splitController.view]; 
} 

- (void)putTabBar { 
TabBarController *tabBar = [[TabBarController alloc] init]; 
[window addSubview:tabBar.view]; 
} 

RootiPadViewController est en charge de la le chargement de données d'une génération des vitres pour la SPLITVIEW, de sorte que son initialisation incorpore un modalView avec un chargeur, de telle sorte que:

@implementation RootiPadViewController 

@synthesize seccionesView, noticiasView; 

- (id)init { 
if ((self = [super init])) { 
    SeccionesVC_iPad *sec = [[SeccionesVC_iPad alloc] init]; 
    NoticiasVC_iPad *not = [[NoticiasVC_iPad alloc] init]; 
    self.noticiasView = not; 
    self.seccionesView = sec; 
    Init *initVC = [[Init alloc] init]; 
    [self presentModalViewController:initVC animated:YES]; 
} 
return self; 
} 

le code compile sans avertissement, mais pour une raison quelconque, la méthode de loadview de initVC est jamais appelé et la vue modale n'apparaît pas ...

Des idées pour lesquelles cela pourrait se produire? merci pour votre aide!

Antonio

Répondre

1

Peut-être que vous devriez présenter votre ViewController modal de la méthode «viewDidLoad la RootViewController, au lieu de la méthode « init » ... Je ne sais pas la hiérarchie de vue est créée que bientôt

2

Je sais que ce C'est la question de l'année dernière, mais même si je pense avoir trouvé la cause, j'essaie toujours de trouver une bonne solution de non-hack pour y faire face.

En supposant que vous travaillez pour iPad:

Lors de l'initialisation, viewDidLoad splitViewController Master est appelé d'abord, puis viewDidLoad du détail. Si vous essayez de mettre un initialiseur de fenêtre modale dans viewDidLoad du maître, rien ne semble se produire: Cela est dû au fait que ViewDidLoad du détail a été exécuté après viewDidLoad de votre vue modale, ce qui a masqué votre vue modale. En pointant la classe de vue modale, je la vois entrer initWithNibName dans la vue modale. Je n'utilise pas l'ARC et ici, je suppose que votre vue modale ne se libère pas jusqu'à ce que le programme se termine - La vue modale est toujours là, mais il n'y a aucun moyen d'y accéder. Ne pas tenir compte de cela - car il n'y a pas de splitViewController pour l'iPhone. En fait, le projet Universal splitViewController par défaut traite les vues Master et Detail en tant que pages distinctes. Donc, à l'application init, tout ce dont vous avez à vous soucier est le maître viewDidLoad. C'est pourquoi, dans un projet Universal, pousser une vue modale dans viewDidLoad fonctionne comme prévu dans l'émulateur iPhone, mais JAMAIS dans l'émulateur iPad.

Notez que ceci s'applique uniquement pendant l'étape viewDidLoad; Si vous poussez une vue modale APRES viewDidLoad dans la fenêtre principale, la vue modale fonctionne comme prévu.