iOS非导航栏导航和视图交换

时间:2012-12-07 16:31:01

标签: objective-c ios cocoa-touch

我想在不使用花哨的iOS导航栏的情况下创建应用。在全屏之间切换的最佳或最正确的方法是什么?

所以说我从“Home”开始,我想在不使用导航栏的情况下进入“LogIn” - 我该怎么办?我应该更改rootViewController吗?当我交换新视图时,如何确保旧视图完全释放?如果没有参考,我想象ARC会消失吗?在ARC之前,我必须将所有内容设置为null?

或者是隐藏导航栏并使用其堆栈的正确方法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用普通UINavigationController并将导航栏设置为隐藏。很简单。

答案 1 :(得分:1)

如果您不想要堆栈,则不能将默认UINavigationController与默认segue一起使用。如果您希望释放目的地后面的所有视图,则必须在目标进入屏幕时将其从堆栈中删除。

我的回答是将所有内容都放在导航控制器中,将栏设置为隐藏(self.navigationController.navigationBarHidden = YES;)并创建一个自定义segue,覆盖perform方法,如下所示:

- (void) perform {
    UIViewController* destination = self.destinationViewController;
    NSArray* newStack = [NSArray arrayWithObject:destination];
    UIViewController* source = self.sourceViewController;
    [source.navigationController setViewControllers: newStack animated: YES];
}

然后,将所有内容连接起来,使segues成为您的自定义类。这样,只要你看到堆栈,就会清除除了新显示的控制器之外的所有东西。

编辑:我猜你编辑是为了澄清你在写这篇文章时想要使用那个堆栈。那好吧。在那种情况下,是的,只需将栏设置为隐藏并使用正常。