2015-04-17 57 views
1

我已經創建了一個應用程序,用紅色的VC(根)來說明,以及用藍色的VC說明的入門序列。在用戶到達主應用程序(紅色)之前,我想攔截導航控制器中的啓動並檢查用戶是否已加入。這樣做的最佳模式是什麼?目前,無論我在NC中擁有什麼邏輯,或者在何處放置它,只要它是根VC,就會對紅色VC進行評估。根VC使用入門序列的最佳模式/設置/邏輯是什麼? (也許根本VC是沒有必要的,我已經使用它,因爲它似乎工作提高相對發射時間到模態賽格瑞)加入序列的最佳模式(邏輯)是什麼?

enter image description here

更新1:這裏是SWIFT代碼 - 它的工作原理

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    let isOnboarded:Bool = NSUserDefaults.standardUserDefaults().boolForKey("Onboarded") 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    // instantiate your desired ViewController 
    let dashboardViewController = storyboard.instantiateViewControllerWithIdentifier("DashboardVC") as! UIViewController 
    let onboardingViewControllerOne = storyboard.instantiateViewControllerWithIdentifier("OnboardingVCOne") as! UIViewController 

    let window = self.window 

    if (isOnboarded) { 
      window!.rootViewController = dashboardViewController 

     }else{ 
      window!.rootViewController = onboardingViewControllerOne 
    } 

    return true 
} 

回答

1

這樣的邏輯可以很好地適用於App Delegate *中的applicationDidFinishLaunchingWithOptions:方法。

你會查詢NSUserDefaults,看看你是否有值爲firstRun的特定鍵。 如果你這樣做,那麼你將藍色的VC設置爲根視圖控制器,如果不是的話,你會設置紅色的,並且將'firstValue'鍵的BOOL保留爲NSUserDefaults

*人們會告訴你用邏輯填充App Delegate是一件壞事,而且他們是對的,但是這是正確的,因爲它是在設置視圖層次結構之前調用的。

編輯:這是一些代碼。我正在註銷我的頭頂,所以它可能需要調整工作...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIViewController *blue = [UIViewController new]; 
    UIViewController *red = [UIViewController new]; 
    BOOL isFirstLaunch = [[NSUserDefaults standardDefaults] boolForKey:@"firstRun"]; 
    UIWindow *window = self.window; 
    if (firstRun) 
    { 
    self.window.rootViewController = blue; 
    } 
    else 
    { 
    self.window.rootViewController = red; 
    [[NSUserDefaults standardDefaults] setBool:YES forKey:@"firstRun"]; 
    } 

    //...rest of method... 
} 
+0

ahh好的,我明白了,那很聰明。你寫道:「...如果不是,你會設置紅色的,並且將'firstValue'鍵的BOOL持久化爲NSUserDefaults。」你堅持什麼意思?你能否詳細說明一些代碼?我應該能夠找到如何設置VC作爲根VC – KML

+0

當然讓我編輯答案。我也會說,閱讀蘋果公司在這類事情上的一些東西對你來說是件好事,所以你對這些概念感到更加自在。 – Cocoadelica

+0

好的,做完了,讓我知道你是否還有其他問題。如果您可以接受答案,如果您對此感到滿意,那將會很棒:) – Cocoadelica

相關問題