2016-05-05 12 views
4

私はiOS用のアプリケーションを作成していますが、ページビューコントローラ(通常のビューコントローラではありません)を開こうとしますが、ユーザーがアプリケーションを初めて開くときだけです。iOSアプリで初めてページビューコントローラーを開く方法は、アプリを初めて実行するときですか?

問題は、コード内に新しいページビューコントローラを開くことができないことです。ユーザーに表示される最初の画面はログイン画面ですが、最初に訪問するとページビューコントローラーに切り替わります。私はすでにストーリーボード上に作成され開きたい

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    let launchedBefore = NSUserDefaults.standardUserDefaults().boolForKey("launchedBefore") 
    if launchedBefore { 
     //Not the first time, show login screen. 
    } 
    else { 
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "launchedBefore") 
     //First time, open a new page view controller. 
    } 
    let secondViewController:InstructionViewController = InstructionViewController() 

    self.presentViewController(secondViewController, animated: true, completion: nil) 
} 

ページビューコントローラを:

は、これは私がこれまでのログイン画面のViewControllerで持っているものです。

+0

あなたは近くにいるので、rootViewControllerの設定が完了したら、アプリケーションの委譲メソッドdidFinishLaunchingWithOptionsにView Controllerを表示することをお勧めします。 – bolnad

答えて

3

アプリケーションデリゲートのwillFinishLaunchingWithOptionsメソッドが最適な場所(AFAIK)になります。条件をチェックし、それに応じてウィンドウのルートビューコントローラを設定します。

+0

詳細が必要な場合は教えてください – harshitgupta

+0

XCodeの初心者として、私は実際にどこから始めたいのか分かりません。 –

+0

http://stackoverflow.com/a/35862933/1120688あなたに頭を下げてください – harshitgupta

2

他の回答で私は問題を解決することができました。 appDeligateで

は、あなたがこれで最初の関数を置き換えるために必要なファイル:

var window: UIWindow? 
var storyboard:UIStoryboard? 

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

    window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    window?.makeKeyAndVisible() 

    let launchedBefore = NSUserDefaults.standardUserDefaults().boolForKey("launchedBefore") 

    if launchedBefore { 
     //Not the first time, show login screen. 
     storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let rootController = storyboard!.instantiateViewControllerWithIdentifier("Login") 

     if let window = self.window { 
      window.rootViewController = rootController 
     } 

    } 
    else { 
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "launchedBefore") 
     //First time, open a new page view controller. 
     storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let rootController = storyboard!.instantiateViewControllerWithIdentifier("Instruction") 

     if let window = self.window { 
      window.rootViewController = rootController 
     } 
    } 

    return true 
} 

「ログイン」および「命令」(ページ)ビューコントローラの名前です。

これが最も堅牢なコードかどうかはわかりませんが、うまく動作します。ここで

+0

私はあなたもあなたのメインの自動ロードを無効にするべきだと思いますあなたのplistファイルのエントリを削除することによってストーリーボード。 –

1

はスウィフト3に更新レスリーのコードです:

window = UIWindow(frame: UIScreen.main.bounds) 
    window?.makeKeyAndVisible() 

    let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore") 

    if launchedBefore { 
     //Not the first time, show login screen. 
     storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let rootController = storyboard!.instantiateViewController(withIdentifier: "webView") 

     if let window = self.window { 
      window.rootViewController = rootController 
     } 

    } 
    else { 
     UserDefaults.standard.set(true, forKey: "launchedBefore") 
     //First time, open a new page view controller. 
     storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let rootController = storyboard!.instantiateViewController(withIdentifier: "progressView") 

     if let window = self.window { 
      window.rootViewController = rootController 
     } 
    } 

はdidFinishLaunchingWithOptions前

var storyboard:UIStoryboard? 

を設定するために、そして自分自身に似た識別子を設定することを忘れないでください。コントローラ識別子を表示する。

関連する問題