如何在可可触摸中切换视图?

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];

其中navigationControllerUINavigationController 设置为@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 的任何位置添加导航控制器。

【讨论】:

以上是关于如何在可可触摸中切换视图?的主要内容,如果未能解决你的问题,请参考以下文章

在可可触摸中以编程方式将视图位置设置为右上角

如何展示我的可可触摸框架故事板屏幕?

可可触摸:如何找出被触摸的对象

可可触摸试图在它再次弹出之前延迟uiview的动画

在可可触摸框架中隐藏实现

如何将 pod(第三方框架)添加到我的自定义可可触摸框架中?