在没有导航控制器的情况下导航到另一个视图控制器

Posted

技术标签:

【中文标题】在没有导航控制器的情况下导航到另一个视图控制器【英文标题】:Navigating to another view controller without a navigation controller 【发布时间】:2010-11-09 09:37:34 【问题描述】:

正如您猜想的那样,我还是个新手,开始关注 iPhone 开发。 我只是在尝试按需加载基本视图,我无法开始工作

我有一个应用程序,有 2 个视图控制器,每个视图控制器连接一个不同的 nib 文件。 我正在尝试手动切换视图;不涉及导航控制。

如何手动将第二个视图推送到第一个视图? self.navigationController pushViewController 不会工作,因为没有导航控制器。 我还能如何将第二个视图推到第一个视图之上并破坏第一个视图;当然反之亦然? 我已经在第一个视图的按钮操作中做到了这一点:

SecondView *sv=[[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
[self.navigationController pushViewController:sv animated:YES];

显然,它没有用。

window addSubView 也不起作用,因为第一个视图控制器是根视图控制器(不确定我说得对)。换句话说,当我运行应用程序时,第一个视图是我看到的带有一个应该加载第二个视图的按钮。

我花了几个小时寻找一个简单的例子,但我找不到。

有什么建议吗?

【问题讨论】:

SecondView *sv=[[SecondView alloc] initWithNibName:@"SecondView" bundle:nil]; [self.view addSubview:sv.view]; [sv 发布];这似乎奏效了,但没有动画;如何添加动画,就像使用导航控制器一样 编辑了我的答案。 :) 包括动画 【参考方案1】:

在第一个视图控制器中你需要这个:

- (IBAction)pushWithoutViewController:(id)selector 
    NextNavigationController *page = [[NextNavigationController alloc] initWithNibName:NextNavigationController bundle:nil];
    CGRect theFrame = page.view.frame;
    theFrame.origin = CGPointMake(self.view.frame.size.width, 0);
    page.view.frame = theFrame;
    theFrame.origin = CGPointMake(0,0);
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.8f];
    page.view.frame = theFrame;
    [UIView commitAnimations];
    [self.view addSubview:page.view];
    [page release];

然后将其链接到 nib 中的按钮。 :)

【讨论】:

太好了,Gyani 和 thomas,您的解决方案有效! Gyani 的解决方案只给出一个动画,向上滑动,在 presentModalViewController 中是否有任何选项可以让我从右到左设置动画? Thomas 解决方案更加精细,我可以以任何我想要的方式和速度控制动画。 这个解决方案只替换视图,而不是视图控制器。此外,initWithNibName 接受第一个参数作为 NSString,而不是类。因此,应该写成... initWithNibName:@"NextNavigationController"... 啊,在 initWithNibName 前面很好看...忘记了我的@""... :p 你永远不会“替换”视图控制器。它只是一个对象。您所做的只是拥有该对象,而不是将其交给导航控制器来控制。【参考方案2】:

试试:

SecondView *sv=[[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
[self presentModalViewController:sv animated:YES];

【讨论】:

嗨 gyani,是否可以使用相同的语句添加不同类型的动画? @Veeru 是的,可以添加不同类型的动画,例如 SecondView *sv=[[SecondView alloc] initWithNibName:@"SecondView" bundle:nil]; sv.modalTransitionStyle = UIModalTransitionStyleFlipHorizo​​ntal; [self presentModalViewController:sv animated:YES]; 也非常感谢 gyani 和 thomas。我很喜欢 gyani 的方法,因为它涉及的代码更少。再次感谢:)【参考方案3】:

如果你有第一个 xib 并且你想给另一个控制器导航,那么你必须声明导航到 appdelegate.m 将以下代码写入应用程序

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController = navController;

然后在 ViewController.m 中

- (IBAction)NextButtonClicked:(id)sender

    yourNextViewController *objyourNextViewController = [[yourNextViewController alloc] initWithNibName:@"yourNextViewController" bundle:nil];
    [self.navigationController pushViewController:objStartUpViewController animated:TRUE];

【讨论】:

以上是关于在没有导航控制器的情况下导航到另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何导航到另一个导航控制器iOS

在没有导航控制器的情况下滑动 Web 视图时如何隐藏工具栏?

导航控制器不显示后退按钮

滑动单元格时,有没有办法从 tableViewCell 导航到另一个视图控制器?

如何在单击按钮时从一个视图控制器导航到另一个视图控制器?

如何在没有导航栏的情况下水平切换视图?