簡體   English   中英

在AppDelegate App崩潰時將3個以上ViewController推入NavigationController中

[英]Push more than 3 ViewController in NavigationController from AppDelegate App crash

我正在研究推送通知。 現在,當應用程序升至設備並點擊時。 我想將3 ViewController推送到導航堆棧。

所以我正在使用下面的代碼來做到這一點。

AppDelegate.cs代碼

Window = new UIWindow(UIScreen.MainScreen.Bounds);
Menu = new SlideoutNavigationController();

var storyboard = UIStoryboard.FromName("Main", null);
var webController = storyboard.InstantiateViewController("DashBoardViewController") as DashBoardViewController;

Menu.MainViewController = new MainNavigationController(webController, Menu);
Menu.MenuViewController = new MenuNavigationController(new DummyControllerLeft(), Menu) { NavigationBarHidden = false };

Window.RootViewController = Menu;
Window.MakeKeyAndVisible();

var storyboarddd = UIStoryboard.FromName("Main", null);
var webControllerdd = storyboarddd.InstantiateViewController("DashBoardViewController") as DashBoardViewController;
webControllerdd.reloadNotication();

UINavigationController nav = webController.NavigationController;
var notifyWebController = storyboard.InstantiateViewController("NotificationListViewController") as NotificationListViewController;
notifyWebController.navigationContoller = nav;
nav.PushViewController(notifyWebController, true);

if (type.Equals("Damage Report"))
{
    var webController2 = storyboard.InstantiateViewController("DamageReportViewController") as DamageReportViewController;
    webController2.DamageReportId = id;
    webController2.navigationContoller = nav;
    nav.PushViewController(webController2, true);
}
if (type.Equals("Overloss"))
{
    var webController2 = storyboard.InstantiateViewController("OverlossViewController") as OverlossViewController;
    webController2.PacketId = id;
    webController2.navigationContoller = nav;
    nav.PushViewController(webController2, true);
}

上面的代碼可以很好地打開Specific ViewController。

但是My App在崩潰日志之后崩潰了。

崩潰報告:

2017-07-26 15:25:18.330 Aastha.iOS[6357:2021514] nested push animation can result in corrupted navigation bar
2017-07-26 15:25:18.740 Aastha.iOS[6357:2021514] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

我的解決方案:

當我在google上搜索時,有人說每個ViewController的ViewDidAppear方法一個接一個地打開ViewController,但是我不確定這是否正確。

任何幫助將不勝感激。

您不能通過動畫推送多個視圖控制器。 如果希望用戶看到轉換A-> B-> C,則確實必須在A和B的viewDidAppear方法中進行。

如果希望用戶僅看到最后一個視圖控制器C並能夠返回A和B,則可以一次將它們全部推入,但是您需要在沒有動畫的情況下進行操作:

nav.PushViewController(webController2, false);

另一個選擇是使用SetViewControllers像這樣:

nav.SetViewControllers([A, B, C], true);

這將同時推入所有3個視圖控制器,並且只有最頂層的一個將使用推入過渡進行動畫處理。 我認為這不適合您的情況,只是為了完整起見在此處添加它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM