2012-05-15 17 views
5

Możliwe jest zastąpienie domyślnego kontrolera widoku z storyboardu, aby wyświetlić zamiast niego inny kontroler? Wszystko to oczywiście dzieje się w AppDelegate.ios zmienić domyślny kontroler widoku storyboard w czasie wykonywania

+1

Domyślny ViewController jest zadeklarowany w info.pList w najnowszych pakietach SDK. Czy ma sprawdzić coś na starcie, a następnie zdecydować, co viewcontroller do push? – Martol1ni

+0

@ Martol1ni tak, to, co powiedziałeś, jest dokładnie tym, czego szukam. – Jacksonkr

+0

Czy używasz kontrolera UINavigationController? – Martol1ni

Odpowiedz

10

@ Martol1ni Chciałem użyć twojej odpowiedzi, ale chciałem też trzymać się z daleka od niepotrzebnego bałaganu, więc trochę zmodyfikowałem twój kod. Jednak dałem ci +1 za inspirującą odpowiedź.

Umieściłem wszystkie następujące elementy na kontrolerze domyślnym.

- (void)gotoScreen:(NSString *)theScreen 
{ 
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:theScreen]; 
    [app.window setRootViewController:screen]; 
} 

A tam, gdzie pojawia się logika, zadzwonię w razie potrzeby.

if(myBool == YES) { 
    [self gotoScreen:@"theIdentifier"]; 
} 
5

Zdecydowanie osadzę rootView w UINavigationController, więc nie masz dwóch, ale trzech widoków. Ten nigdy nie jest uruchamiany, tylko kontroluje wszystkich innych. Następnie zaimplementuj w nim metody:

- (void) decideViewController { 
    NSString * result; 
    if (myBool) { 
     result = @"yourIdentifier"; 
    } 
    else { 
     result = @"yourOtherIdentifier"; 
    } 
    self.navigationController.navigationBarHidden = YES; // Assuming you don't want a navigationbar 
    UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:@"view1ident"]; 
    [self.navigationController pushViewController:screen animated:NO]; // so it looks like it's the first view to get loaded 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self decideViewController]; 
} 

Nigdy nie wygląda na załadowanie pierwszego widoku. Jeśli korzystasz z NIBS, możesz zrobić wszystko od AppDelegate ...

Powiązane problemy