我遇到了一个例外,由于我的知识有限,我无法解决自己。 我在IOS应用程序中使用滑出菜单,以便在应用程序ViewControllers中导航。
每当我第二次尝试导航至同一ViewController时,都会遇到异常:
“ NSInvalidArgumentException原因:不支持将同一视图控制器实例多次推送”
代码如下:
rolladeButton.TouchUpInside += (o, e) => {
if (NavController.TopViewController as Rolladecontroller == null)
NavController.PushViewController(rolladeController, false);
}
我第一次按下rolladeButton时,第二次遇到上面的异常。 我花了几个小时,才想到了这个“解决方案”
lichtButton.TouchUpInside += (o, e) => {
if (NavController.TopViewController as ContentController == null && pushedlicht == 0) {
NavController.PushViewController(contentController, false);
SidebarController.CloseMenu();
pushedlicht++;
}
else
{
NavController.PopToViewController(contentController, false);
}
现在这对您来说可能看起来很愚蠢,但这至少可以为我完成工作……至少在我尝试添加第三个菜单按钮之前。 使用当前3种不同ViewController的解决方案,我再次遇到异常: “试图弹出到不存在的视图控制器。”甚至我已经打开过一次。
我的猜测:先前已添加的ViewController已从堆栈中删除。由于我的变量,它试图将其推到甚至不存在的地方。
为什么(NavController.TopViewController as Rolladecontroller == null)始终为真? 有人可以在这里帮助我如何正确执行此操作吗?
现在我用这个
lichtButton.TouchUpInside += (o, e) => {
try
{
NavController.PushViewController(contentController, false);
SidebarController.CloseMenu();
}
catch (Exception E)
{
NavController.PopToViewController(contentController, false);
SidebarController.CloseMenu();
}
startButton.SetBackgroundImage(UIImage.FromFile("start_buttoninactive"), UIControlState.Normal);
lichtButton.SetBackgroundImage(UIImage.FromFile("licht_buttonactive"), UIControlState.Normal);
RolladeButton.SetBackgroundImage(UIImage.FromFile("rollade_buttoninactive"), UIControlState.Normal);
};
但是它不认为这是正确的方法,如果我想将其提交批准,它可能会失败。