- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在处理一些需要重构的代码。一个 View Controller 充当两个其他 View Controller 的容器,并将在它们之间交换,如下面的代码所示。
这可能不是最好的设计。可能不需要以这种方式交换 View Controller 。我明白那个。但是,当我使用这段代码时,我想进一步了解 addChildViewController 调用会发生什么。我无法在此处的 Apple 文档或相关问题中找到答案(可能表明设计需要更改)。
具体来说——容器 View Controller 如何处理要求添加它已经添加的 subview Controller 的情况?它是否认识到它已经添加了该 View Controller 对象?
例如如果下面的代码在一个方法中 - 并且该方法被调用了两次...
[self addChildViewController:viewControllerB];
[self.view addSubview:viewControllerB.view];
[viewControllerB didMoveToParentViewController:self];
[viewControllerA willMoveToParentViewController:nil];
[viewControllerA.view removeFromSuperview];
[viewControllerA removeFromParentViewController];
谢谢,加文
最佳答案
一般来说,their guidelines for view controller "containment" ,当一个包含另一个时,应遵循以确定您是否需要实现遏制。
特别是,担心两次添加相同的 subview Controller 就像担心两次呈现相同的 View Controller 一样。如果你真的把事情想通了,你应该不需要面对那个问题。你的直觉是正确的。
我同意 Apple 的文档应该更直接地说明奇怪的参数或乱序调用时会发生什么,但也可能是不想将自己束缚在会引起麻烦的纠错设计上在路上。当你设计出一个永远不会以错误的方式调用这些方法的设计时,你就正确地解决了问题,并使自己独立于它们可能有或没有的任何纠错——如果你考虑到这一点就更重要了,因为它不是记录在案,错误更正在未来可能会以不同的方式工作,从而破坏您的应用程序。
更进一步,您会注意到 Apple 的容器 View Controller 无法进入无效状态(至少使用公共(public) API 不容易)。使用 UITabViewController
,从一个 View Controller 切换到另一个 View Controller 是一个原子操作,并且选项卡 View Controller 在任何时间点都知道发生了什么。它最多要做的就是删除事件的并显示新的。只有当你告诉它“你应该把所有东西都从水里吹出来,然后开始使用这些 View Controller ”时,它才会把所有东西都扔掉。
为其他任何事情编写代码,例如删除所有 View 或所有 View Controller ,无论在某些情况下看起来是权宜之计还是健壮的,但实际上恰恰相反你的代码的一端不信任你的代码的另一端来保持它的一部分交易。在任何实际帮助您的情况下,这意味着您让人们随意添加 View Controller 而没有您应该想要的控制,在这种情况下,这就是您应该解决的问题。
关于objective-c - 了解 addChildViewController 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12685907/
我对 Objective-C 和 iOS 还很陌生,而且我已经接受了别人编写的应用程序。我注意到一些让我震惊的事情,我认为我的问题与人们提出的关于 addChildViewController 的其他
我正在尝试使用类似于 UINavigationController 的东西,以便我可以自定义动画。首先,我只是使用 Apple 库存动画。这是我的 containerViewController: -
我是第一次涉足 iOS 开发,我必须做的第一件事就是实现 custom container view controller - 让我们称它为 SideBarViewController - 交换它显示
iOS 5引入自定义容器 View Controller 的概念,并提供类似 addChildViewController 的 API .问题:您能否将 View Controller 添加为 sub
使用 Storyboard,我试图在当前 View 之上覆盖一个 UIViewController。 在我的 FirstViewController 中,我导入了 SecondViewControll
灵感来自 Scott Sherwood tutorial我在 UIViewController 中有一个 UIView,它通过自定义 segues 对不同的 UItableviewController
我正在使用下面的代码将 View 添加为addChildViewController。 VideoListVC * videoListVC = [[VideoListVC alloc] initWit
我刚刚观看了 2011 年 WWDC 上有关“实现 UIViewController Containment”的演示 ( here's a link to the video ) 他们提到了将 vie
我在使用 addChildViewController 实现顶部栏(如导航 Controller 栏,但自定义)时遇到问题。我在 .xib 文件中创建了这个栏,并添加了具有正确自动布局约束的按钮和图像
我刚开始使用这种方法,所以我可能完全错了,所以这是我的代码: @property (nonatomic, weak) ConverterViewController *converterViewCon
我正在处理一些需要重构的代码。一个 View Controller 充当两个其他 View Controller 的容器,并将在它们之间交换,如下面的代码所示。 这可能不是最好的设计。可能不需要以这种
我知道在 iOS 中可以通过三种方式更改 View 1. [self addChildViewController:thirdViewController]; [contentView addSubv
这两种方法都将 View 添加为父 View 的 subview ,并且 View 可以接收事件。什么时候使用哪一个? 最佳答案 这完全取决于您希望如何管理新的 subview 。如果您希望新的 su
我正在制作示例项目来实现顶级菜单。 下面是项目结构。 TopMenu 是父 View ,其结构如下所示。 在 TopViewController 中,下面的 viewDidLoad 是我拥有的。 NS
有没有人遇到过这个?以下代码在 iOS 4 模拟器上运行时报告"is",但根据 Apple 文档,方法 addChildViewController 仅在 iOS 5 及更高版本上可用。这似乎不是正确
我想使用与 addChildViewController 相同的功能,但对于版本 4.3(addChildViewController 仅在版本 5 中可用)。提前致谢。 最佳答案 虽然不建议这样做,
我正在尝试重用 this AdMobViewController class 我按照实现示例中的描述应用了它,看起来它工作正常,但我的 View 向上移动并且它现在位于操作栏下方的标题。你能告诉我如何
我有一个 iPhone 应用程序,在手机上运行时运行良好,但在 iPad 上以兼容模式运行时启动时崩溃。我在我的项目中使用 iAd,特别是我正在使用 Bannerviewcontroller.h an
我在Apple上看到这个方法的描述 func addChildViewController(_ childController: UIViewController) This method is on
我有一个类似于模态视图 Controller 的东西,我需要在其他 View Controller 上方显示它。我没有使用常规模式 Controller 功能(presentViewControlle
我是一名优秀的程序员,十分优秀!