2016-04-23 21 views
0

私は、イベントを引き起こすことができるAppDelegateからapplicationWillEnterForegroundが起動すると知っています。私がしたいのは、バックグラウンドから再表示されるときにアプリに特定のビューを表示させることです。ビューは、loginViewControllerと呼ばれるUIViewControllerであり、 "initViewController"のストーリーボードIDを持っています
私の質問は、このアプリケーション(applicationWillEnterForground)で、アプリケーションが再びフォーカスを当てたときにこのビューを読み込むために使用するものですか?ありがとう。swift - バックグラウンドからの復帰後に特定のビューを表示する方法を教えてください。

答えて

2

私は決してこれをやったことはありませんが、UIViewControllerをUIViewControllerスタックに追加して、ビューコントローラを追加してそのビューを表示したい場合は、(ケース1を参照)またはあなたがしたいことをあなたがのUIViewControllerへの参照を必要とする最初のケースで、ルートビューコントローラは、既存のビューコントローラのスタックを破棄して新しいものを使用する場合(ケース2を参照)

ケース1)親ビューコントローラを作成します。あなたはどこか静的変数でこれを保存することができたり、ちょうどその時、アプリの再起動、一時的なビューを示すことを計画しているならば、あなたは、ルートビューコントローラは、親として使用への参照を取得することができます:

// get a reference to the main storyboard 
let mainSB = UIStoryboard(name: "Main", bundle: nil) 

// get a reference to the root view controller 
if let rootVC = UIApplication.sharedApplication().keyWindow?.rootViewController, 

    // get a reference to the view controller using identifier 
    initVC = mainSB.instantiateViewControllerWithIdentifier("initViewController") as? UIViewController { 

     // present the view controller 
     rootVC.presentViewController(initVC, animated: false, completion: nil) 

} 

ます

self.dismissViewControllerAnimated(true, completion: nil) 

既存のView Controllerスタックを破棄して置き換えることで、新しいものを開始することができますケース2):それを却下する、と彼らはスタート地点、ユーザーが戻ってする必要がありますビューコントローラ内から使用ロジックを終了しますルートビューコントローラーを開き、手動でスタックを構築します。アニメーションパラメータをfalseに設定して、ビューコントローラを順に表示します。

// get a reference to the main storyboard 
let mainSB = UIStoryboard(name: "Main", bundle: nil) 

// get references to view controllers 
if let vc1 = mainSB.instantiateViewControllerWithIdentifier("vc1") as? UIViewController, 
    vc2 = mainSB.instantiateViewControllerWithIdentifier("vc2") as? UIViewController { 

     // set root view controller 
     UIApplication.sharedApplication().keyWindow?.rootViewController = vc1 

     // build up the view controller stack by adding next vc 
     vc1.presentViewController(vc2, animated: false, completion: nil) 
} 

ナビゲーションコントローラ

ビューコントローラの一つは、あなたがそのようにキャストする必要があり、その後、あなたのナビゲーションコントローラ上に任意のビューコントローラをプッシュしますナビゲーションコントローラである場合。ナビゲーションコントローラには独自のスタックがあります。

if let myNavCon = mainSB.instantiateViewControllerWithIdentifier("nav") as? UINavigationController { 

    // push view controller onto navigation controller stack 
    myNavCon.pushViewController(someViewController, animated: false) 
} 

WARNING

これは、すべてのあなたのアプリのモデル(のみUI)を扱っていません。また、prepareForSegueなどで設定したデータを設定する必要があります。プログラムでもストーリーボードでも表示できるVCがある場合に使用する簡単なシステムは、segueとmoveの準備にあったコードを取ることです子ビューコントローラへの参照をパラメータとして受け取る独自のインスタンスメソッドに渡します。次に、ビューコントローラを表示する前に、デスティネーションビューコントローラまたはコードからセグを準備することから呼び出すことができます。

このコードはテストされていません。それはウェブサイトから直接書かれたものです。おそらくタイプミスを含んでいるでしょう。私は何かを修正できるように私にお知らせください。

+0

この回答がストーリーボードの構造とそのUI要素を理解するのにどれだけ役立ったか想像できません。あなたの答えはうまくいって、とても感謝しています! – skrite

関連する問題