2015-06-22 71 views
0

我一遍又一遍地遇到以下问题,并且正在寻找干净的解决方案来执行此操作。我有多个视图:一个父视图(我的rootView,由我的基本UIViewController控制)和一个后代视图(UICollectionViewCell在UICollectionView是我的rootView的子视图)。更改在子视图中父视图上设置的约束条件

UICollectionView的大小与我的rootView的大小有关:在创建UICollectionView的rootView的UIViewController中,我还创建了约束(在rootView和UICollectionView之间)并将它们添加到rootView。

当在UICollectionViewCell中点击一个按钮时,我想更改UICollectionView的大小。因此,我需要改变在我的rootView上设置的约束。

我被告知通过UIViewController的downcast访问rootView的约束,并以这种方式改变它们是很脏的,因为有一个视图回到它的(父)控制器是错误的。

我该如何应对这种情况?如何让控制器对视图做出反应而不会与控制器交谈?一个正确的方向将是伟大的!

+0

你说:“我有多个视图:父视图和子视图是父视图的子视图。”你的意思是你有一个子视图**控制器**谁的视图是父视图**控制器的子视图?请编辑你的问题来澄清。 –

+0

我相信这就是我的意思,是的。具体来说,我正在讨论一个collectionViewController,其视图放置在我的rootView中。 (该按钮位于我的collectionViewCell中,所以甚至有三个视图嵌套,但我想如果我理解原理,只要我能够将其转换为这种特定情况。) – chl

+0

术语视图和视图控制器是**不* *可互换。 UIView是UIView的一个子类,在屏幕上显示内容和/或从用户收集信息。 'UIViewController'是管理一组视图的控制器对象。在提问时,请务必不要混用您的条款。 –

回答

0

经过您的编辑,听起来您只有一个视图控制器在这里玩。那样的话,生活就是好的。操纵控制集合视图的约束的逻辑属于视图控制器。

您想要将按钮水龙头传递给您的视图控制器,并让它处理调整集合视图的大小。

你是如何处理按钮水龙头?

+0

现在,在我的UICollectionViewCell init函数中,我编写了'button.addTarget(self,action:“buttonTap:”,forControlEvents:UIControlEvents。TouchUpInside)'和我有一个叫做buttonTap的函数,在同一个类中。 – chl

+0

我现在使用的NSNotification和它的工作很好 - 我无法弄清楚如何使用协议 - 具体在哪里告诉单元它委托 – chl

+0

在你的viewController的cellForItemAtIndexPath方法中进行addTarget调用。那么你不需要担心代表。 –

相关问题