2016-12-30 13 views
0

私はPageVCを表示するアプリケーションを作成しています:UIPageViewControllerを紹介してアプリを紹介します。 イントロをナビゲートした後、次ボタンは、アプリのデフォルト設定を保存するために使用される「設定VC」につながります。 設定は後で変更できますが、最初にユーザーが選択する必要があります。Swift 3:プログラムでViewControllerを切り替えます

PageVC ---> SettingsVC

保存アプリのMainVCSettingsVCリード上ボタンをキャンセル。

ボタンオンMainVC設定VC

SettingsVC < ---> MainVC

次のようにアプリが動作します:舞で

if isFirstLaunch{ 
    instantiate PageVC 
}else{ 
    instantiate MainVC 
} 
PageVC

nextButtonPressedinPageVC{ 
     instantiate SettingsVC 
} 
SettingsVC

if saveButtonPressed && cameFromPageVC{ 
    instantiate MainVC 
} 
if cancelButtonPressed && cameFromPageVC { 
    do Nothing 
} 
if saveButtonPressed && cameFromMainVC{ 
    dismiss currentVC 
} 
if cancelButtonPressed && cameFromMainVC { 
    dismiss currentVC 
} 

をNVC

if settingsButtonPressedinMainVC { 
     instantiate SettingsVC 
} 

私はそれは、アプリケーションの最初の起動であれば、PageVCがMainVCがインスタンス化される他のインスタンス化されることを確認してきました。

どのように私は可能メモリなしviewControllers間を移動することができ、リークつまりどこにperformSegue現在のVCを却下するには?

参照のためのコードを含めてください。

+0

ストーリーボードを使用したいのですか? –

+0

私はすでにストーリーボードを作成しました。どんな説明も役立ちます。 –

答えて

1

これを行う方法はたくさんありますが、ストーリーボードでほとんどの作業を行うことができるので、私は非常に簡単です: MainVCをrootViewControllerとみなし、他の2つをアクセサリビュー一時的に表示されます。 MainVCは常にあなたのエントリーポイントでなければならないので、あなたのストーリーボードの最初のVCとして設定してください。

他の2つはモーダルで表示する必要があります。そのため、最初にどのように開いたのかに関係なく、簡単にMainVCに戻すことができます。

これを行うには、MainVCボタンからSegueをPageVCに描画し、「showPageVC」という名前を付けます。 PageVCの[次へ]ボタンから、別のセグをSettingsVCに描画します。今、あなたは却下アクションを処理するためにいくつかのコードを必要とする:あなたのMainVCにこのスニペットを置く:

@IBAction func unwindToMain(segue:UIStoryboardSegue) { 
} 

この関数は、単なるマーカーであるので、体を必要としません。MainVCに戻ります:SettingsVCの各ボタンについては、Ctrlキーを押しながらボタンからSettingsVCストーリーボードシーンのヘッダーの右出口アイコンまで描画し、小さな黒いポップアップでunwindToMainを選択します。

これで、MainVCのviewDidAppear()にPageVCを表示するかどうかを決定するロジックを実装するだけで済みます。したがって、コード全体は次のようになります。

class MainVC: UIViewController { 

    var didDisplayPageVC = false 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     if (didDisplayPageVC == false) { 
      performSegue(withIdentifier: "showPageVC", sender: self) 
      didDisplayPageVC = true 
     } 
    } 

    @IBAction func unwindToMain(segue:UIStoryboardSegue) { 
    } 

} 

残りはストーリーボードにあります。この小さな概念実証が機能している場合は、セグを構成したり(アニメーションを削除したいかもしれません)、

+0

チャームのように働いた!! –

関連する問題