问题标签 [childviewcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3514 浏览

ios - iOS 访问 parentViewController 中的属性

尝试访问 parentViewController 中的方法时,我的应用程序崩溃。这是 StoryBoard 中的布局

在此处输入图像描述

MainViewController = STLMMainViewController (ParentViewController)

Scene1 = STLMTimeDateViewController (ChildViewController)

这是 STLMTimeDateViewController 的代码

应用程序运行,但调用 STLMMainViewController 时,应用程序崩溃并出现以下错误:

如果我删除以下行:

然后离开

应用程序运行,没有错误,但 [STLMMainViewController locationButtonSelected] 中的以下方法没有被调用(我从未看到日志):

locationButtonSelected 方法中的所有属性和方法本身都在 STLMMainViewController 的 .h 中声明,以供公共访问。

谢谢

0 投票
3 回答
8072 浏览

ios - 容器视图控制器 - 通知父操作

假设我有一个自定义容器视图控制器 (MainViewController),我在其中执行以下操作:

HomeViewController 将有一个按钮,例如“go”,当按下该按钮时需要前进到下一个视图控制器。所以我需要通知 MainViewController 这个动作。做这个的最好方式是什么?

我正在使用自定义容器,因为我需要在视图控制器之间进行自定义转换。当按下“go”时,HomeViewController 上的一些视图将动画,而来自新视图控制器的视图正在动画到位。

显然,我可以给 HomeViewController 一个 MainViewController 类型的属性并以这种方式进行调用,但我希望容器视图控制器 API 有一种更简洁的方式。

0 投票
1 回答
180 浏览

ios - 何时以及如何使子 UIViewController 无效

我正在使用以下代码将子视图控制器添加到我的主视图控制器:

子视图控制器正在控制的视图包含一个按钮,当点击该按钮时,应从主视图控制器中删除子视图和子视图控制器。

按下按钮时运行的子视图控制器中的方法如下所示:

然后主视图控制器中将关闭子视图控制器的方法如下所示:

这段代码一切正常。但是,在我看来,子视图控制器被设置为零,而子视图控制器的 -(void)photoLibraryCloseButtonTapped:(id)sender 方法仍在运行(即 -(void)photoLibraryRequestingClose 方法尚未返回,但是我正在取消调用 photoLibraryRequestingClose 的子视图控制器。

我正在使用 ARC。

为什么这行得通,我是否应该以不同的方式管理子视图控制器的删除,记住触发子控制器删除的按钮是由子视图控制器管理的。

非常感谢。

0 投票
4 回答
1022 浏览

ios - 向多个子视图控制器发送消息的最佳方式

我实现了一个自定义UIViewController,它有多个子视图控制器(主要是通过使用故事板Container View,但不仅仅是)。

我想知道“根”视图控制器向其子级发送消息的最佳方式是什么,考虑到发送的消息所涉及的子级视图控制器不一定是“根”视图控制器?

例如:

查看控制器层次结构

我想从#0视图控制器#1#4. 天真的实现是遍历子节点#0并向他们发送消息,如下所示:

但它根本不起作用,因为#3会收到消息(或者如果它是 aUINavigationController并且我正在调用自定义方法,则可能不会收到)并且不会将其传播给它的孩子(这里#4)。

那么是否有可能向自己的孩子发送消息,并让消息通过UIViewController层次结构传播?

如果没有,另一种方法是使用NSNotificationCenter,让对消息感兴趣的孩子(#1#4)观察通知,并在必要时让根视图控制器发布通知。但我觉得只给两个孩子发信息有点过头了。

0 投票
1 回答
1311 浏览

ios - UINavigationController 作为 UINavigationController 的子级

我不知道标题是否解释了问题本身,但在这里......

我有一个 UINavigationController,它是 UINavigationController 的 parentViewController。问题是 childViewController 的行为很奇怪,当我将它作为孩子添加时,它首先有 statusBar 的间隙(它不占据整个屏幕),如果我通过隐藏和显示导航栏来“解决”那个“错误”,差距消失了,但现在孩子不尊重我手动设置的框架。然后我试图继续,当我在孩子身上展示一个模态并解雇它时,整个孩子都消失了......

那里会有什么问题?两个容器的父子关系还是什么?

谢谢指教

编辑:这是一个显示奇怪行为的示例项目

http://www.mediafire.com/?8saa68daqfkf335

编辑2:我实际上找到了一个解决方案,但我在Apple Docs上并没有发现它很清楚,它说childViewControllers从它们所属的parentViewController中获取它的框架,但它并没有说如果parentViewController“重新出现”(比如推动它)childViewControllers 再次被 parentViewController 框架调整大小......希望这对任何人都有帮助

0 投票
1 回答
178 浏览

ipad - 如何像 iPad 上的音乐应用那样构建方形叠加层的呈现方式?

我需要创建一个界面,该界面与 iPad Music 应用程序在专辑选项卡中显示曲目列表的方式基本相同——视图中心的一个正方形包含视图控制器的视图,播放控件仍可在顶部访问。点击视图周围的灰色区域应将其关闭。

我将如何在仍然支持 iOS 5 的同时做到这一点?它只是创建视图控制器并将其视图添加为子视图的情况吗?或者我应该对视图控制器遏制做些什么?

我附上了一张截图来说明我的意思(涂抹以隐藏品牌等)。中心的白色方块需要能够包含各种视图控制器,通常由导航控制器管理。

在此处输入图像描述

0 投票
0 回答
1537 浏览

ios - iOS - 使用父视图控制器立即显示子视图控制器

我多个视图控制器将在单击按钮时显示动态视图控制器,这是我的视图控制器的布局方式: 在此处输入图像描述

在按下“开始”按钮之前,“calculationView”视图不会显示任何内容。当用户在视图控制器 2 中按下“开始”按钮“calculationView”时,会显示一个子视图控制器(此处未显示)。

View Controller 2 中的后退箭头将用户带回到选项卡栏中的 Item 1,并在计算视图中的 VIew Controller 2 中显示相同的视图控制器。

现在,除了视图控制器 1 中的计算视图中的内容在视图显示后大约一秒出现之外,一切正常。

这是我在 View Controller 2 中加载计算视图的方式:

下面是我如何使用 runInProgress BOOL 在 View Controller 1 中显示计算视图:

问题:
现在我的问题是如何制作它,以便计算视图与视图控制器 1 同时出现。

另外,我有一个设计问题。计算视图将位于每个视图控制器上的静态位置。有没有更好的方法在基于 runInProgress BOOL 的每个视图控制器上显示计算视图。

0 投票
0 回答
224 浏览

ios - 使用 PSTCollectionViewController 时未在子视图控制器中调用 ViewDidLoad

我使用 PSTCollectionView 作为 UICollectionView 的替代品,以兼容 iOS5(以及 iOS6)。我正在使用情节提要创建我的根视图控制器,然后以编程方式添加 PSTCollecitonViewController。这是代码:

我的 DRCollectionVC 是 PSTCollectionViewController 的子类。DRCollectionVC 的 ViewDidLoad 为:

上面的 ViewDidLoad 没有被调用。我用 UICollectionView 尝试了类似的方法,这似乎工作得很好。

0 投票
0 回答
278 浏览

ios - iphone5上子视图控制器的视图框架的奇怪行为

我想要做的是创建一个视图控制器,并让它的视图从右侧动画。主视图控制器有一个名为 viewContainer 的视图,它将容纳这个视图。奇怪的是,这在模拟器和 ipod 4g 上完美运行,但在 iPhone5 上不起作用(都运行 ios6)。

在 ipod 4g 上,新视图正确地从右侧动画化。然而,在 iPhone5 上,视图立即出现在 (0,0)。这可能是什么原因造成的?

0 投票
3 回答
13578 浏览

uiviewcontroller - 如何在界面生成器中创建容器/子视图控制器关系

要从代码创建 2 个视图控制器之间的父/子关系,基本上只需执行以下操作:

其中self是父视图控制器。
但是,如果我想完全从 Interface Builder 中创建相同的关系怎么办?
或者换句话说:有没有办法使用 Interface Builder 重新创建方法 addChildViewController 的行为?
我没有找到很多关于此的文档,这里有一篇关于该主题的未解决的旧帖子:https ://devforums.apple.com/message/455758#455758

如果没有正确设置 addChildViewController 关系,任何旋转方法都不会转发到我的子视图控制器,这是我的问题的来源。

这是我在 IB 所做的:

  1. 将“视图控制器”对象从“对象库”面板拖放到“对象”面板中
  2. 在身份检查器中,我已将其类更改为我的 UIViewController 子类(“Items View Controller”)
  3. 将视图出口连接到控制器
  4. 将所有其他需要的插座连接到控制器(列表名称、表格视图)

图片中的第一个“视图”对象是我的父视图控制器的视图,而不是突出显示的“视图”是子视图控制器(“项目视图控制器”)的视图。

在此处输入图像描述

容器控制器还通过额外的 IBOutlet 保留其子实例:

谢谢


更新 1:如果我在容器控制器的 viewDidLoad 中手动设置父/子关系,则所有旋转方法都会正确转发给子级。

但我真的不知道这是否是正确的做法,因为我想用 IB 来做所有事情。


更新 2:感谢@micantox 提示在对象库中使用“容器视图”,我已将我的 xib 文件转换为情节提要,现在子视图控制器已添加到其父级,所以我不必使用 addChildViewController 从代码手动添加它,旋转方法按预期转发。
“容器视图”基本上实现了嵌入 segue,并且仅受 iOS 6 支持。
这是我的 Storyboard 的更新屏幕截图:

在此处输入图像描述