以编程方式更改子视图控制器

Posted

技术标签:

【中文标题】以编程方式更改子视图控制器【英文标题】:Change subview controller programmatically 【发布时间】:2013-04-23 12:01:52 【问题描述】:

我有一个基于页面的 3 页应用程序,在每个页面上我都有一个 UIView 作为子视图,这个 UIView 是从 UIViewController 加载的。在最后一页,我有一个包含不同项目的UICollectionView当我触摸UICollectionCell 时,我想更改子视图。

这是我的故事板:

Orange UIView 加载了来自 UIViewControllers 的视图(带有 xib 文件)

还有viewWillAppear: 上的DataViewController.m

- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];
    self.dataLabel.text = [self.dataObject description];

    if([self.dataLabel.text isEqualToString:@"View1"])
        [mainView addSubview: view1.view];
    else if([self.dataLabel.text isEqualToString:@"View2"])
        [mainView addSubview: view2.view];
    else if([self.dataLabel.text isEqualToString:@"View3"])
        [mainView addSubview: view3.view];
    

以及如何处理触摸UICollectionCell的方法:

- (void)collectionView:(UICollectionView *)collectionView
            didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
   // Change the view

【问题讨论】:

【参考方案1】:

您可以将 UICollectionView 上的事件委托给 DataViewController 以更轻松地处理这些事件。


1- 使用标签识别您的UICollectionView 以便轻松检索:

//Supposed that your UICollectionView has been declared as an IBOutlet in your .h
yourCollectionView.tag = 1;

2- 将<UICollectionViewDelegate> 添加到您的DataViewController.h 以处理UICollectionView 事件,

3- 在将 View 的 UICollectionView 委托添加到 DataViewController 之后,将其设置为 mainView

//Replace 1 with the NSInteger you chose
[[[mainView subviews] lastObject] viewWithTag:1] setDelegate:self];

4- 处理 DataViewController 上的 didSelectItemAtIndexPath 以更改视图。

【讨论】:

【参考方案2】:

像这样尝试它会帮助您将子视图带入您想要的视图,

 [self.view bringSubviewToFront:view];

【讨论】:

这也会加载视图的控制器? bringSubviewToFront 的参数:方法不是字符串,应该是 UIView 或其子类。

以上是关于以编程方式更改子视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

更改子视图控制器的宽度

以编程方式切换子视图控制器:XLPagerTabStrip

以编程方式设置为根视图控制器时,视图控制器无法正确显示子视图

如何以编程方式为情节提要中的子视图设置视图控制器?

以编程方式实例化自定义视图控制器并通过标签获取子视图

Xcode - 我如何以编程方式在容器视图中嵌入/更改视图控制器?