1

我有一堆UIViewControllers 子类(我们称它们为MainForm, DetailForm, MoreMinorDetails)。基本上这个想法是AppDelegate类实例化MainForm,用户按下某种类型的按钮MainFormDetailForm出现。然后按一个按钮就DetailForm启动了MoreMinorDetails。当然,我应该能够回到MainForm.

请注意,视野中没有任何UINavigationController物体。以上述方式在 s
之间移动的公认模式是什么?UIViewController

还是我以错误的方式处理它?我会对基于 XCode 或 MonoTouch 的解释感到满意。

4

2 回答 2

2

您可以使用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];
}

要转到某个视图控制器(您必须确切知道它何时被推送到导航控制器的堆栈中):

-(void)goToViewController
{
    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
}

或者弹出到你的根视图控制器

[self.navigationController popToRootViewControllerAnimated:YES];

这样,您将获得UINavigationController的功能并保留视图中的所有空间。

于 2012-09-05T11:01:48.003 回答
1

愤怒的黑客,

我的简单建议是跟随zoul one。我认为实现您想要的最简单的方法是创建一个UINavigationController并将其用作其他控制器的包含控制器。

因此,可以在 中创建一个UINavigationController并将AppDelegate其设置rootViewController为您的window. 当您创建 a 时,UINavigationController您可以将根控制器传递给它(在本例中MainForm)。

在 MT 中看起来如下(不要相信代码,因为我是手工编写的)

private UINavigationController navController;
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
    navController = new UINavigationController(new MainForm());
    window.RootViewController = navController;
    window.MakeKeyAndVisible ();

    return true;
}

现在,当您启动应用程序时,您将看到MainForm的视图,并且能够允许在不同控制器之间导航。

例如,MainForm你可以去DetailForm喜欢:

this.NavigationController.PushViewController(new DetailForm(), true);

这同样适用DetailFormMoreMinorDetails

退一步,例如MoreMinorDetailsDetailForm使用

this.NavigationController.PopViewControllerAnimated(false);

转到根控制器 ( MainForm) 内DetailFormMoreMinorDetails使用

this.NavigationController.PopToRootViewControllerAnimated(false);

关于空间,这不是问题。我猜你有两种方法。第一个是移动您在导航控制器栏中创建的栏项目。在每个控制器中,您可以决定哪些按钮可见或不可见。第二个是完全隐藏导航栏并使用您已经创建的按钮。

在这两种方式中,您都可以将操作附加到这些按钮并允许在控制器之间导航。此外,如果您选择第一个,您还可以隐藏导航栏的后退按钮。

需要记住的一个简单说明如下:

由于导航栏对于 a 是唯一的UINavigationController,因此该栏将为您在导航控制器中推送的所有控制器保持其状态。为了解释这个概念,假设你有两个控制器,比如 A 和 B。你首先按下 A,然后在它的ViewWillAppear方法中隐藏一个按钮。当您按 B 时,该按钮仍然不可见。如果你想取消隐藏B中的按钮,你可以玩它的ViewWillAppear方法(像以前一样)等等......

如果你不想玩,UINavigationController你应该看看UIViewController类提供的新视图控制器包含功能。这仅适用于 iOS >= 5。您可以获得相同的UINavigationController机制效果,但可能更难实现。

希望有帮助。

于 2012-09-05T10:47:03.490 回答