首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIViewController中的UIViewController

UIViewController中的UIViewController
EN

Stack Overflow用户
提问于 2012-04-07 00:07:26
回答 4查看 235关注 0票数 0

所以我有一个viewControllerA,我想向它添加另一个由viewControllerB管理的视图。在viewControllerB中,只有一个UISlider可以激活一个简单的操作。如果我不接触这个UISlider,它不会崩溃,一旦我使用UISlider,它就会崩溃。我正在使用ARC。我正在使用:

代码语言:javascript
复制
[self.view addSubView: viewControllerB.view];

将viewControllerB添加到viewControllerA。我是不是遗漏了什么?谢谢。

好的。这看起来是一个非常简单的情况。我刚刚添加了一个视图控制器和一个操作。以下是github上的演示项目代码:https://github.com/randomor/Demo

我希望这样做的原因是因为我有另一个应用程序可以在现场创建一个视图控制器,并将其添加到另一个视图中。我不想以模态的方式来做这件事,因为我不想让新的视图控制器覆盖整个屏幕。谢谢。

解决方案:所以我现在只使用最新的ViewController容器API:

代码语言:javascript
复制
[self addChildViewController:viewControllerB];

它起作用了!只要我添加了这一行,事件就会被传递给它自己的控制器,它就会停止崩溃。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-07 00:26:12

我建议您使用以下代码

ViewControllerA.h

代码语言:javascript
复制
    #import "ViewControllerB.h"

ViewControllerA.m中(要推送新控制器的位置)

代码语言:javascript
复制
ViewControllerB *newController = [[ViewControllerB alloc]init];
[self presentModalViewController:newController animated:YES];

ViewControllerB.m中,您需要

代码语言:javascript
复制
[self.presentingViewController dismissModalViewControllerAnimated:YES];

让它再次消失。

关于一个开放屏幕的多个控制器(苹果ViewController编程指南):

您创建的每个自定义视图控制器对象都负责管理一个屏幕的内容。在设计应用程序时,视图控制器和屏幕之间的一对一对应是一个非常重要的考虑因素。您不应该使用多个自定义视图控制器来管理同一屏幕的不同部分。类似地,您不应该使用单个自定义视图控制器对象来管理多个屏幕上的内容。

票数 2
EN

Stack Overflow用户

发布于 2012-04-07 01:35:37

您应该尝试并避免嵌套UIViewControllers的做法。虽然iOS5在技术上支持它,但由于许多原因,它是不明智的,包括您遇到的问题类型(您有一个指向UIViewController的悬空指针,这就是您崩溃的原因)。

http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/

票数 2
EN

Stack Overflow用户

发布于 2012-04-07 00:17:10

尽管这个问题非常模糊,但我想您并没有保留对视图控制器B的引用,因此当视图B试图与其交互时,它会导致EXC_BAD_ACCESS。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10046048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档