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。见下面我的答案。