1

Je suis en train de modifier mon application pour ajouter un achat intégré à l'application. Lors de la configuration initiale de l'application, j'ai utilisé le constructeur d'interface mais maintenant je dois décider quel fichier xib & de classe charger au lancement d'application selon si un utilisateur a acheté une caractéristique.Déterminez le code de la classe et du fichier xib à charger lors du lancement de l'application

Mon application est configurée avec un contrôleur de barre d'onglets doté d'un contrôleur de navigation pour chaque onglet. Dans le fichier MainWindow.xib, j'ai demandé à IB d'utiliser la classe HomeView.xib et HomeView. Maintenant, je dois vérifier si une fonctionnalité a été achetée et charger HomeView ou HomeView2. Je ne sais pas où dans l'application pour dire le naviagionController quelle classe et vue à charger comme je l'ai précédemment mis tout cela dans le constructeur de l'interface. Est-ce que je peux prendre cette décision dans le HomeViewNavigationController au lieu que IB prenne automatiquement cette décision pour moi?

Merci d'avance pour votre aide!

Répondre

1

Restez simple.

Dans HomeView.xib, vous avez deux vues différentes que vous pouvez charger. Avoir la vue du UIViewController dans le xib être la "vue du conteneur". Faites votre code de détection dans viewDidLoad de votre contrôleur HomeView, puis ajoutez la vue appropriée sous forme de sous-vue.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (featureWasPaidFor) 
    { 
     [self.view addSubview:self.homePurchaseView]; 
    } else { 
     [self.view addSubview:self.homeNonPurchaseView]; 
    } 
} 
+0

La vue va avoir des fonctionnalités différentes. Différents boutons et actions ... Donc je pensais que j'aurais deux classes séparées et des fichiers xib. Si featureWasPurchased alors créez homePurchaseView avec le fichier xib homePurchaseView. Si je vais sur cette route, je devrai décider quelle classe charger avant d'appeler la méthode ViewDidLoad dans la classe homePurchaseView. – jmurphy

+0

C'est pourquoi je vous disais que vous avez une vue principale avec une vue de conteneur qui gère le processus de prise de décision et charge la vue appropriée. Vous pouvez toujours avoir des classes séparées et des XIB, puis simplement les initialiser dans la logique ci-dessus. – bstahlhood

+0

Ok maintenant, mon application charge l'affichage de l'onglet qui a été mis en place à l'intérieur de IB en utilisant MainWindow.xib. Lorsque l'application démarre, le premier onglet est ouvert avec la vue appelée HomeView.xib. Dans quelle classe la méthode viewDidLoad décrite ci-dessus réside-t-elle? Cela fait-il référence à la méthode viewDidLoad dans mon fichier HomeView.m actuel? Donc, fondamentalement, gardez exactement la même configuration que j'ai maintenant et créez mes deux classes séparées, homePurchaseView & homeNonPurchaseView et les ajoutez dans la méthode viewDidLoad de ma méthode homeView viewDidLoad actuelle? Merci! – jmurphy

1

Vous définissez le xib que vous voulez charger dans votre Info.plist. Au moment du lancement, le système chargera automatiquement ce fichier xib. Bien qu'il soit facile de changer le nom xib dans le fichier Info.plist, il sera rejeté par Apple.

Voici ce que je ferais: ne pas utiliser xibs, au moins pour les deux que vous avez mentionné. Au lieu de cela, créez tout dans applicationDidFinishLaunching: notification (NSNotification *)

- (void)applicationDidFinishLaunching:(NSNotification *)notification 
{ 
    UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    UITabBarController *t = [[UITabBarController alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)]; 
    // add the other view controllers 

    if(/* check for which xib to load */) 
    { 
     // change whatever you need to change 
    } 
    else 
    { 
     // ... 
    } 

    [window addSubview:[t view]]; 
    [window makeKeyAndVisible]; 
}