![](/img/trans.png)
[英]Setting window.rootViewController with a presented view controller on top shows a blank screen (iOS 12)
[英]iOS: Setting the rootViewController doesn't remove the old presented view controllers
在我的Objective-C應用程序中,有一個loginViewController,在用戶成功登錄后,我從該位置顯示homeViewController。 這是我顯示房屋的方式:
-(void) displayHome {
UIViewController * home = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"homeViewController"];
_window.rootViewController = publicHome;
[_window makeKeyAndVisible];
}
displayHome
函數位於AppDelegate
。 之后,在homeViewController中,我使用了一些視圖控制器
[self presentViewController:controller animated:false completion:nil];
有時,我必須將用戶重定向到loginViewController,所以我將此VC稱為我的VC(通過設置rootViewController),以便刪除所有其他視圖。 但是,當我使用3d調試器時,我看到了所顯示的視圖。 為什么當我設置rootViewController
與loginViewController
,即使有連接到不會被刪除所提出的意見homeViewController
是作為rootViewController
?
編輯
一個例子:
假設從homeViewController
(即rootViewController
)轉到viewController1
(顯示了viewController1
)。 現在,當我在按下一個按鈕viewController1
我必須回到loginViewController
。 在按鈕操作中,這是我要做的:
我打電話
[self dismissViewControllerAnimated:false completion:nil];
和[appDelegate displayLogin];
//AppDelegate
-(void) displayLogin {
UIViewController * login = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"homeViewController"];
_window.rootViewController = publicHome;
[_window makeKeyAndVisible];
}
調試時,我發現viewController1
仍然在這里。 它在登錄下。 即使設置了rootViewController
為什么viewController1
也位於rootViewController
?
也許您應該首先檢查UIViewControllers中是否已執行-dealloc
方法。 嘗試在viewController1
添加以下代碼:
- (void)dealloc {
NSLog(@"ViewController %@ dealloc", NSStringFromClass([self class]));
}
如果尚未調用此方法,請在調用[self dismissViewControllerAnimated:false completion:nil];
之后檢查是否還有指向viewController1
強引用[self dismissViewControllerAnimated:false completion:nil];
這通常是由於保留計數而引起的,請檢查您的實現並確保沒有完成塊或不允許調用dealloc的操作。 一旦調用了dealloc,所有視圖將被刪除
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.