如何在可可触摸中切换视图?
Posted
技术标签:
【中文标题】如何在可可触摸中切换视图?【英文标题】:How do I switch views in cocoa touch? 【发布时间】:2011-12-24 03:53:39 【问题描述】:我在一个 cocoa touch 项目中有两个名为“view1ViewController”和“view2ViewController”的视图控制器,它们都链接到情节提要中的 UIView。假设我在 view1 中放置了一个按钮。 Codewise,按下该按钮后切换到 view2 的最简单方法是什么?我需要输入什么代码才能让它工作?
-- 更新--
尽管你们都告诉我这件事,我仍然无法让它工作。也许我没有得到什么?我需要添加其他东西吗?以下是 view1ViewController.m 的代码:
#import "view1ViewController.h"
#import "view2ViewController.h"
@interface view1ViewController ()
@property (nonatomic, strong) view2ViewController *controller;
@end
@implementation view1ViewController
@synthesize controller = _controller;
- (view2ViewController *)controller
if (!_controller)
_controller = [[view2ViewController alloc] init];
return _controller;
- (IBAction)buttonPressed
[self.navigationController pushViewController:self.controller animated:YES];
@end
其他文件我没碰过,确保将storyboard中添加的view的class设置为view2ViewController。
【问题讨论】:
Xcode 只是一个 IDE——所以正确的答案是:根本没有 您必须在代码中完成,还是基于 segue 的方法适合您? 我不太喜欢基于 segue 的方法,因为我正在尝试开发一个应用程序,该应用程序对视图采用相当动态的方法, 处理故事板可能需要做很多不同的事情。如果您不打算使用情节提要,我建议您创建一个使用界面生成器 xib 文件的项目。我对故事板了解不多,所以在那里我帮不上什么忙。对于(希望)快速修复,您可以以编程方式触发 segue。您可以编辑答案并粘贴完整的错误消息吗? 如果你使用 UIView,你不是在使用 Cocoa,你是在使用 Cocoa Touch。我已相应地编辑了您的问题。 【参考方案1】:只是
[self.navigationController pushViewController:view2ViewController animated:YES];
简单的结果,你可能会发现自己只是在谷歌上搜索了一会儿......
我假设您的应用是基于导航的。如果不是这种情况,您需要初始化UINavigationController
。例如,在您的应用委托中,在您的 didFinishLaunchingWithOptions:
方法中,您可能会执行类似的操作
navigationController = [[UINavigationController alloc] init];
[self.window addSubview:navigationController.view];
[navigationController pushViewController:self.viewController animated:NO];
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
其中navigationController
是UINavigationController
设置为@property
。
如果您不想设置 UINavigationController
,您可以选择使用
[self presentModalViewController:view2ViewController animated:YES];
【讨论】:
我必须#import 任何文件中的任何内容吗?因为它说意外的推理名称“view2ViewController” 您必须在要引用的任何文件中#import view2ViewController 的头文件。还要记住,如果你不使用 ARC,你会想要释放你的 view2viewcontroller: View2ViewController *controller = [[View2ViewController alloc] init]; [self.navigationController pushViewController:控制器动画:YES]; [控制器发布]; 还是不行。你能在主帖中阅读我的更新吗?顺便说一句,你的评论很有帮助,杰克! 嗯。好吧,我看到您正在为控制器定义一个自定义 getter 方法。您不需要该方法(-(view2ViewController *)控制器)。不过,我认为这不是问题所在。 xcode 是否自动假定“控制器”是 UIViewController 的子类?【参考方案2】:如果您没有设置导航控制器,这种方法将不起作用。要设置导航控制器,您需要确保当前视图是导航控制器的根视图控制器。这可以通过编程方式完成,但如果您使用 Storyboard,将视图嵌入导航控制器会容易得多。一旦控制器就位,推送应该可以工作。
对于情节提要嵌入,请转到顶部菜单并选择 编辑->嵌入导航控制器。
为了通过代码来实现,无论您在何处创建此视图,都应将其写为
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:view1ViewController];
然后在添加 view1ViewController 的任何位置添加导航控制器。
【讨论】:
以上是关于如何在可可触摸中切换视图?的主要内容,如果未能解决你的问题,请参考以下文章