繁体   English   中英

如何推送根视图控制器?

[英]How do I push root view controller?

我想推送根视图控制器。 为什么此代码不起作用?

RootController *rootController = [[RootController alloc]initWithStyle:UITableViewStylePlain];               
[self.navigationController pushViewController:rootController animated:YES];
[rootController release];

我以前这样使用过addSubview。

- (void)cancel {
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)viewDidLoad { // this is root view controller
    [super viewDidLoad];

    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)];
    self.navigationItem.leftBarButtonItem = cancelButton;
    [cancelButton release];     
}

RootController *rootController = [[RootController alloc]initWithStyle:UITableViewStylePlain];               
UINavigationController *aNavigationController = [[UINavigationController alloc]initWithRootViewController:rootController];
self.naviController = aNavigationController;
[aNavigationController release];
[rootController release];
[self.view addSubview:[naviController view]];

我在导航栏中添加了“取消”按钮以返回上一个视图。 没用 因此,我想推送而不是添加。

您可以使用以下命令在UINavigationController中设置根控制器

initWithRootViewController:

方法。 因此,您的做法是正确的。 我建议您检查self.view并确保它不是nil

编辑:您的评论后

您需要为UINavigationController定义一个根视图控制器,以使其正常工作。 UINavigationController参考

每个导航堆栈必须至少具有一个视图控制器才能充当根目录。

因此,您无法删除根视图控制器。 可能的是,为了使事情按您的意愿工作,您应该创建一个附加的视图控制器以用作您不会更改的根视图控制器,然后将RootViewController推入导航堆栈,然后弹出即可:

UIViewController *baseController = [[UIViewController alloc] initWithStyle:UITableViewStylePlain];               
UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:baseController];
self.naviController = aNavigationController;
[aNavigationController release];
[baseController release];
[self.view addSubview:[naviController view]];

RootController *rootController = [[RootController alloc] initWithStyle:UITableViewStylePlain];               
[self.navigationController pushViewController:rootController animated:YES];
[rootController release];

请注意,我首先将一个简单的UIViewController定义为根视图控制器,然后将其推入其中。

一旦这样做,如果像您一样添加取消按钮,它将可以从导航堆栈中弹出rootViewController。

最后评论后:

如果我理解的正确,单击取消按钮时,您希望完全摆脱UINavigationController。

在这种情况下,请使用以下代码进行cancel

- (void)cancel {
   [self.navigationController.view removeFromSuperview];
}

如果这个猜想是正确的,请记住,由于您没有保留对导航控制器的任何引用,因此它将被取消分配,并且您实例化的所有视图控制器都将被释放。

如果不是完全删除UINavigationController,而是简单隐藏导航栏,则在弹出rootController之后,调用:

setNavigationBarHidden:animated

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM