這次是判斷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
}
經過測試後改寫的方法就是我想要的,希望有遇到相同問題的人有得到幫助喔!
如果你只是要盼斷是否第一次開起的話請參考:
沒有留言:
張貼留言