2012-01-08 4 views
1

Lors du codage d'applications iPhone, je n'ai jamais utilisé Interface Builder moi-même; pensé que c'était trop compliqué et inutile. Problème, j'ai décidé de prendre un projet openourced abandonné sur GitHub qui utilise Interface Builder, et je n'arrive pas à arrêter de l'utiliser.Arrêtez d'utiliser Interface Builder

Il semblait que je devrais commencer à partir de zéro sur le codage par programmation des vues, donc je suis allé à Info.plist de l'application et supprimé les touches liées NSMainXIBFile (ou quelque chose comme ça). Une fois que je l'ai fait, l'application se lance et un message est imprimé par la console: Les applications doivent avoir un contrôleur de vue racine à la fin du lancement de l'application.

Je n'arrive pas à trouver le problème ici; Je l'ai fait:

NSArray *controllers = [NSArray arrayWithObjects:controller1, controller2, nil]; 
UITabBarController *tabBarController = [[UITabBarController alloc] init]; 

[tabBarController setViewControllers:controllers]; 
[window addSubview:tabBarController.view]; 
[window makeKeyAndVisible]; 

Suis-je sauter une étape clé sur l'arrêt de l'aide Interface Builder ou est mon erreur au code lui-même?

+11

Juste un commentaire: Coder l'interface à la main est plus lent (développement et exécution) sans réel bénéfice. –

+0

Bien qu'Interface Builder soit pratique pour le codage des vues, la gestion des view controllers qui l'utilisent est compliquée pour moi; Je préfère garder tout ça dans le code. – Matoe

+0

Si l'utilisation d'IB est compliquée pour vous, alors votre architecture est probablement suspecte - IB est conçu pour bien fonctionner avec la façon dont iOS vous demande de faire les choses. – deanWombourne

Répondre

3

Vous ne devez pas ajouter la vue du contrôleur de la barre d'onglets à la fenêtre en tant que sous-vue. Vous devez définir comme contrôleur de vue racine au lieu de la fenêtre:

window.rootViewController = tabBarController; 
+0

Cela ne fonctionne toujours pas, comme les réponses ci-dessous :( – Matoe

+0

Comment avez-vous défini la fenêtre, est-il défini sur la propriété de la fenêtre du délégué de l'application? – jrturton

+0

Oui, c'est: '@property (nonatomic, retain) UIWindow * window; 'et' @synthesize window = _window' ('_window' est utilisé à la place de' window') – Matoe

0

Vous devez attribuer correctement la propriété window.rootViewController, d'ajouter le contrôleur de barre d'onglets en tant que sous-vue.

self.window.rootViewController = tabBarController; 
0

Essayez

@synthesize window = _window; 


_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
[self.window makeKeyAndVisible]; 

Et puis ajoutez une sous-vue à la fenêtre.