2016年11月20日 星期日

swift3 AppDelegate 判斷UserDefaults資料後指定頁面

剛好遇到一個算是一次性顯示頁面的功能,又與之前所說的盼斷是否第一次開起有些許差異。

這次是判斷UserDefaults內的某個質如果是空就到起始頁面,如果有資料就跳到另一個頁面。

一開始產生兩種想法:

一是寫在起始頁面的viewdidload判斷,然後在跳轉。缺點是用戶會在瞬間看到起始頁面的畫面,必須用其他方式解決。

二是寫在AppDelegate,判斷有資料就直接跳轉到指定的頁面,好處是不管任何APP第一運行的一定是AppDelegate所以就不會發生第一個想法的問題。

於是最後我選擇了二來做,但發生了沒跳轉的問題。
原本寫法如下:
 if(UserDefaults.standard.string(forKey: "email") != nil){
            let stroyboard = UIStoryboard(name: "Main", bundle: nil);
            let HomeVc = stroyboard.instantiateViewController(withIdentifier: "Home")
            self.window?.rootViewController?.present(HomeVc, animated: true, completion: nil)

        }
並會出現錯誤訊息,大致上是說明層級不同會找不到此頁面之類的

所以上網找了幾個方法後改成這樣:
if(UserDefaults.standard.string(forKey: "email") != nil){
            let stroyboard = UIStoryboard(name: "Main", bundle: nil);
            let HomeVc = stroyboard.instantiateViewController(withIdentifier: "Home")
            let appDelegate = UIApplication.shared.delegate as! AppDelegate;
            appDelegate.window?.rootViewController = HomeVc

        }

經過測試後改寫的方法就是我想要的,希望有遇到相同問題的人有得到幫助喔!

如果你只是要盼斷是否第一次開起的話請參考:

沒有留言:

張貼留言