問題
- 今天做專案時遇到了一個問題,我想做一個登陸頁面,在使用者輸入了登入名和密碼後跳轉到app主介面,最開始用的是在方法中新建一個appdelegate物件,再將其中的window屬性設定Tabbar為rootViewController,但是報錯。
原來的方法
//新建appDelegate物件
AppDelegate *app = [[AppDelegate alloc] init];
//初始化window
app.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
app.window.backgroundColor = WHITE;
[app.window makeKeyAndVisible];
//建立tabbar
Tcq_Tabbar *tabbar = [[Tcq_Tabbar alloc] init];
CYLTabBarController *tcq_Tab = tabbar.tcq_Tabbar;
//設定為rootzViewController
[app.window setRootViewController:tcq_Tab];
- 但是執行之後,XCode報了一個錯
Unbalanced calls to begin/end appearance transitions for <CYLTabbarController>
- 上網查了一下發現是因為噹噹前介面的動畫沒有做完時,又開始做下一個動畫,導致介面不變,如果按照原來的方法來解決的話就必須在自定義的tabbar中重寫viewWillAppear方法,這樣的話就要更改CYLTabbarController的原始碼,過於麻煩。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- 想來應該是獲取window的方式不對,然後就在網上查閱資料發現了另外一種方法獲取window。
新方法
if (@available(iOS 13.0, *)) {
//在ios13後通過這種方式獲取window
window = [UIApplication sharedApplication].windows[0];
} else {
window = [UIApplication sharedApplication].delegate.window;
}
- 然後將修改後的程式碼加入專案,成功跳轉