iOS中UIViewControllers之间的导航模式是什么



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

请注意,在任何地方都看不到任何UINavigationController对象
以上述方式在UIViewController之间移动的可接受模式是什么?

还是我的做法不对?我很乐意接受基于XCode或MonoTouch的解释。

您可以使用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的功能,并保留视图中的所有空间。

AngryHacker,

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

因此,方法可以是在AppDelegate中创建一个UINavigationController,并将其设置为windowrootViewController。当您创建一个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);

要转到DetailFormMoreMinorDetails内的根控制器(MainForm),请使用

this.NavigationController.PopToRootViewControllerAnimated(false);

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

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

需要注意的一个简单事项如下:

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

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

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新