SORU
9 Aralık 2011, Cuma


Şartlı başlamak AppDelegate gelen film şeridi içinde farklı yerlerde

Bir film şeridi çalışma giriş ve ana görünüm denetleyicisi ile hazırladım, ikincisi kullanıcının oturum açma başarılı olduğunda için gidilen görünüm denetleyicisi. Amacım, eğer kimlik doğrulaması (Anahtarlık saklanan) başarılı olursa, derhal ana görünüm denetleyicisi göstermektir, ve eğer bu kimlik doğrulaması başarısız olursa, oturum açma görünümü denetleyicisi göster. Temelde, benim AppDelegate içinde bunu yapmak istiyorum:

// url request & response work fine, assume success is a BOOL here
// that indicates whether login was successful or not

if (success) {
          // 'push' main view controller
} else {
          // 'push' login view controller
}

Yöntem performSegueWithİdentifier biliyorum ama bu yöntem UİViewController, öyle değil AppDelegate içinden çağrılabilir örnek yöntemi. Bu nasıl benim mevcut panosu kullanma ??

DÜZENLEME:

Film Şeridi ilk görünüm denetleyicisi artık hiçbir şeye bağlı değildir gezinti denetleyicisi. Ben setRootViewController kullanılan bir UİTabBarController. Mainİdentifier çünkü ayrım. O zaman bu sözlerimi nasıl:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{        
    BOOL isLoggedIn = ...;    // got from server response

    NSString *segueId = isLoggedIn ? @"MainIdentifier" : @"LoginIdentifier";
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
    UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:segueId];

    if (isLoggedIn) {
        [self.window setRootViewController:initViewController];
    } else {
        [(UINavigationController *)self.window.rootViewController pushViewController:initViewController animated:NO];
    }

    return YES;
}

Öneri/iyileştirmeler bekliyoruz!

CEVAP
9 EKİM 2012, Salı


Çözümler burada önerilen olmanın biraz şaşırdım.

ViewDidAppear gerçekten film şeridi kukla navigasyon denetleyicileri için gerek yok, gizleme görüş ve ateşleme dedirtiyor: ya da başka bir kesmek.

Eğer film şeridi plist dosyasında yapılandırılmış yok eğer doğru değilse, you must create both the window and the root view controller yourself :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{        
    BOOL isLoggedIn = ...;    // from your server response

    NSString *storyboardId = isLoggedIn ? @"MainIdentifier" : @"LoginIdentifier";
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
    UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:storyboardId];

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

    return YES;
}

Film şerididenir ve makeKeyAndVisible pencereyi çağırdı. app plist yapılandırılmış, pencere ve kök görünümü denetleyicisi zaten Kur anda uygulama:didFinishLaunching olacak:

Bu durumda, daha basit bir şey

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{        
    BOOL isLoggedIn = ...;    // from your server response

    NSString *storyboardId = isLoggedIn ? @"MainIdentifier" : @"LoginIdentifier";
    self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:storyboardId];

    return YES;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jonathepianist

    jonathepiani

    31 Temmuz 2008
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • TouchePro

    TouchePro

    27 EYLÜL 2007