将UINavigationController添加到主视图以外的视图
我想添加一个UINavigationController到我的应用程序信息视图(不是我的主视图)。我看过/阅读了很多教程,展示了如何使用IB通过AppDelegate将其添加到主窗口。在我的情况下,我只希望它出现在用户按下信息按钮并被带到infoView。这里是我我MainViewController内切换到InfoView的:将UINavigationController添加到主视图以外的视图
- (IBAction)infoButtonPress:(id)sender
{
// Create pointer to instance of InfoViewController
InfoViewController *infoView = [[InfoViewController alloc] initWithNibName:@"InfoViewController" bundle:nil];
// Add view switching animation
infoView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
// Change view using animation
[self presentModalViewController:infoView animated:YES];
}
此时将显示InfoView的,我想这是对的UINavigationController的RootView。我尝试添加该行:
UINavigationController *infoNavController = [[UINavigationController alloc]
initWithRootViewController:infoView];
创建InfoViewController的实例后,应用程序崩溃。是否有可能将UINavigationController添加到除主视图以外的视图?
谢谢。
您与您的实施非常接近。按此顺序尝试。
InfoViewController *infoView = [[InfoViewController alloc] initWithNibName:@"InfoViewController" bundle:nil];
UINavigationController *infoNavController = [[UINavigationController alloc]
initWithRootViewController:infoView];
[infoView release]; // skip this if using ARC
infoView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:infoNavController animated:YES];
UPDATE
要杀死这个模式,你将有你的按钮添加到主模式的看法。
InfoViewController.m
-(void)cancel:(id)sender {
[self dismissModalViewControllerAnimated:YES];
}
-(void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *cancelButton =
[[UIBarButtonItem alloc] initWithTitle: @"Cancel"
style: UIBarButtonItemStylePlain
target: self
action: @selector(cancel:)];
self.navigationItem.leftBarButtonItem = cancelButton;
[cancelButton release];
}
好的。现在,因为这个UINavigationController是在我的MainViewController中创建的,我怎么能用它来说'[infoNavController pushViewController:AboutViewController];'从幻灯片InfoViewController中的Info视图关闭视图? – 2012-01-13 20:05:08
这会将您的infoView放入navigationView中。如果您想推送其他视图,则需要单独推送它们或从您刚刚创建的navigationView中推送它们。如果您希望下一个视图从导航视图中滑过,只需分配/初始化新视图并按下,就像您的评论一样。 – 2012-01-13 20:18:55
对不起,如果您要将新视图推入堆栈,您可以从rootViewController执行此操作,该问题将来自InfoViewController。它应该工作正常。 – 2012-01-13 20:21:42
崩溃日志说什么?那条线应该没问题。然后,您应该将infoNavController作为模式视图控制器呈现,而不是呈现infoView本身。 – 2012-01-13 19:25:09
哦..所以我把infoView的第二行和第三行改为infoNavController。这确实奏效,谢谢。这样做,我必须以编程方式编辑NavigationBar吗?还是我仍然可以使用IB? – 2012-01-13 19:39:51
在这种情况下,编程方式将是最简单的,除非您要从XIB加载整个导航控制器。 – 2012-01-13 19:42:22