Xcode iOS中在UIViewController之间导航的模式是什么?
我有一堆Xcode iOS中在UIViewController之间导航的模式是什么?,xcode,uiviewcontroller,xamarin.ios,navigation,Xcode,Uiviewcontroller,Xamarin.ios,Navigation,我有一堆UIViewControllers子类(我们称它们为MainForm,DetailForm,MoreMinorDetails)。基本上,这个想法是AppDelegate类实例化MainForm,用户按下MainForm上的某种类型的按钮,就会出现DetailForm。然后在DetailForm上的按钮上启动MoreMinorDetails。当然,我应该能够回到main表单 请注意,视野中的任何位置都没有任何UINavigationController对象。 以上述方式在UIViewCon
UIViewController
s子类(我们称它们为MainForm
,DetailForm
,MoreMinorDetails
)。基本上,这个想法是AppDelegate
类实例化MainForm
,用户按下MainForm
上的某种类型的按钮,就会出现DetailForm
。然后在DetailForm
上的按钮上启动MoreMinorDetails
。当然,我应该能够回到main表单
请注意,视野中的任何位置都没有任何UINavigationController
对象。以上述方式在
UIViewController
s之间移动的可接受模式是什么
还是我走错了路?
我很乐意接受基于XCode或MonoTouch的解释。愤怒的黑客
我的简单建议是跟随zoul。我认为实现您想要的最简单的方法是创建一个UINavigationController
,并将其用作其他控制器的包容控制器
因此,方法可以是在AppDelegate
中创建UINavigationController
,并将其设置为窗口的rootViewController
。创建UINavigationController
时,可以向其传递根控制器(在本例中为MainForm
)
在MT中,它看起来如下所示(不要相信代码,因为我是手工编写的)
现在,当您启动该应用程序时,您将看到MainForm
的视图,并允许在不同控制器之间导航
例如,在MainForm
中,您可以转到DetailForm
如下:
this.NavigationController.PushViewController(new DetailForm(), true);
这同样适用于DetailForm
到MoreMinorDetails
要后退一步,例如从moreminordeails
到DetailForm
使用
this.NavigationController.PopViewControllerAnimated(false);
this.NavigationController.PopToRootViewControllerAnimated(false);
要转到DetailForm
或MoreMinorDetails
中的根控制器(MainForm
),请使用
this.NavigationController.PopViewControllerAnimated(false);
this.NavigationController.PopToRootViewControllerAnimated(false);
关于空间,这不是问题。我想你有两种方法。第一种方法是移动在导航控制器栏中创建的栏项目。在每个控制器中,您可以决定哪些按钮使其可见或不可见。第二种方法是完全隐藏导航栏并使用已经创建的按钮
通过这两种方式,您都可以将操作附加到这些按钮,并允许在控制器之间导航。此外,如果选择第一个,还可以隐藏导航栏的“后退”按钮
需要记住的一个简单注意事项如下:
由于导航栏对于UINavigationController
是唯一的,因此导航栏将为您推入导航控制器的所有控制器保持其状态。为了解释这个概念,假设您有两个控制器,比如A和B。您首先按下A,然后在其视图中将出现方法中隐藏一个按钮。按B键时,按钮仍不可见。如果你想取消隐藏B中的按钮,你可以使用它的视图将出现方法(像以前一样)等等
如果您不想玩uiavigationcontroller
,您应该看看UIViewController
类提供的新视图控制器包含功能。这仅适用于iOS>=5。您可以获得与UINavigationController
机制相同的效果,但可能更难实现
希望有帮助。您可以使用UINavigationController
并隐藏导航栏:
self.navigationController.navigationBar.hidden = YES;
然后,在按钮的操作中,只需按下下一个视图控制器:
-(void)buttonAction:(id)sender
{
NextViewController *nextViewController = [[NextViewController alloc] init];
[self.navigationController pushViewController:nextViewController animated:YES];
}
要返回,请使用
-(void)goBack
{
[self.navigationController popViewControllerAnimated:YES];
}
要转到某个视图控制器(您必须确切知道它何时被推到导航控制器的堆栈上):
或弹出到根视图控制器
[self.navigationController popToRootViewControllerAnimated:YES];
这样,您将获得UINavigationController
的功能,并保留视图中的所有空间。为什么看不到导航控制器?导航控制器正是解决这个问题的标准方法。@zoul因为,据我所知(我可能完全错了),第二个屏幕需要导航栏上的后退按钮。我没有空间放它,因为我有+和编辑按钮。请将+按钮移动到工具栏或使其成为视图中某个位置的按钮。您必须有一个导航按钮,导航控制器的返回按钮。您可以在不使用导航栏的情况下使用UINavigationController。见下面我的答案。