2017-02-23 4 views
0

長時間のリスナー、初めての発信者。IOS Swift Dismiss Tab Bar Controllerを起動し、新しいものを起動します。

私は、ログインページ(View Controller)で構成されているアプリケーションに取り組んでいて、4つのタブを持つタブバーコントローラを公開するために閉じています。それぞれに独自のビューを持つナビゲーションコントローラがあります。

タブバーコントローラに関連付けられたすべてのビューを閉じ、ログインビューコントローラにセグメンテーションしてから、新しいタブバーコントローラをインスタンス化する「ログアウト」ボタンをクリックできるようになりました。新しいTab Bar Controllerを解除して作成することなく、ViewDidLoad機能が実装されているため、すべてのTabビューに古いユーザーデータが保持されます。すべてのビュー/タブバーコントローラを無効にせずに、 "ViewDIdLoad"機能をクリアしトリガする別の方法がない限り。

私はIOS Swiftプログラミングを初めて勉強しており、自分自身で教えているので、他のソリューションにもオープンしています。

私の構造はこのようになります

は(アプリは何も現在のユーザーが見つからない場合、それはログイン時に自分自身を閉じるログイン・ビュー・コントローラに戻って蹴る、最初のタブバーコントローラに入ることに注意してください):Login/Tab Bar Controller relationship

+0

は –

+0

@HimanshuMoradiyaは提案をいただき、ありがとうございます。私はそれがガブリエルが以下に示唆したものだと思う。私が最初のView Controllerを自動的に解除しても(それがどこかにまだ残っていないように)、そしてその設定が新しいrootviewcontrollerが良い習慣であるかどうかはわかりません。私は解決策を実装し、報告するつもりです。 – Xion

+0

あなたの問題は解決かどうか? –

答えて

0

ストーリーボードルックス少し紛らわしい。私は最初にTab Barをロードしてから、ログインビューコントローラをモーダルに表示することをお勧めします。しかし、ログインからタブバーまでのセグは何ですか?プッシュセグー?私はそれが使用されていないと思うが、あなたが言うように、ログインはちょうど解雇される。

タブバーを破棄してストーリーボードから新しいものを読み込むには、セグを使用できません。それはさらに簡単です。あなたのアプリのウィンドウのrootViewControllerにTab Barの新しいインスタンスを割り当ててください。

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
appDelegate.window!.rootViewController = theNewTabBar 

そして「theNewTabBar」は、あなたはあなたはユーザーがログインしているかどうかをチェックするためにフラグを格納することができますストーリーボードに識別子を設定し、

storyboard instantiateViewControllerWithIdentifier: 
+0

こんにちはガブリエル、ありがとう。正解ですが、LoginからTabBarへのセグは未使用です。もう一度修正してください。ログインページが閉じられています。私の追随する質問は次のとおりです。新しいrootViewControllerを割り当てるのは良い方法ですか?私のタイトルによれば、あなたは確かに私の質問に答えてきましたが、私はそのようなことに関する意見が聞きました。 TabBar内のすべてのビューをリロードする方が良いですか(個別に非表示にするのは非効率的です)。あなたが提供するスクリプトは、 "view did load"のLoginページにありますか、またはSegueに応答してより良い方法を呼び出すことができますか? – Xion

+0

さらに、私が変更を加える前に、新しいrootviewcontrollerが作成された後にLoginページを閉じると、わかりやすく説明しています。それはrootviewcontrollerに戻るか、追加のセグを必要としますか? – Xion

+0

@ Xion新しいroootViewControllerの設定を避けたい場合は、タブバーをサブクラス化し、ユーザーデータ内のメソッドを追加して新しいViewControllerを設定できます。つまり、タブのビューコントローラをインスタンス化し、新しいインスタンスで配列を設定します。古いものは自動的に破壊されます。 – Gabriel

0

を使用する必要がありますことをインスタンス化します。アプリケーションの読み込み時に最初にログインページを開く必要があります。しかし、LOGIN PAGEであなたはそのフラグをチェックしなければなりません。

ページよりも真であれば、直接Tab Barにリダイレクトする必要があります。それが の場合は、ログインに成功した場合よりも偽です。Set Flag Trueを設定する必要があります。ログアウト時に POP TAbBARを実行し、フラグFalseを設定する必要があります。

これはより良い構造です。アプリケーションスコープでフラグを設定するには、boolをユーザーのデフォルト値として保存する必要があります。これは、フラグを格納してフラグを取得する関数です。ユーザーのログアウトが、その後、あなたが簡単にあなたのタブバーを管理できるようにprogramically rootviewcontrollerを設定し、1つのチェックユーザログインのためのブール値かどうかを取らなければならないとき

//for set Bool 
class func setUserDefaultBool (value : Bool, key : String){ 
     UserDefaults.standard.set(value, forKey: key) 
     UserDefaults.standard.synchronize() 
} 

//for get 
class func getUserDefaultBOOLForKey (key: String) -> Bool{ 
     return UserDefaults.standard.bool(forKey: key) 
} 
+0

こんにちはAnshul、あなたは "ログアウト時にあなたはPOPタバールをすべき"と言います。 TabBarをポップするにはナビゲーションコントローラに埋め込む必要がありますか?または、私はログインページを最初に開いた後、TabBarにセグメンテーションした場合、これは機能しますか? – Xion

+0

こんにちは、あなたはナビゲーションコントローラを持っているはずです、流れはNC->ログイン - >タブバーです –

関連する問題