以编程方式更改子视图控制器
Posted
技术标签:
【中文标题】以编程方式更改子视图控制器【英文标题】:Change subview controller programmatically 【发布时间】:2013-04-23 12:01:52 【问题描述】:我有一个基于页面的 3 页应用程序,在每个页面上我都有一个 UIView
作为子视图,这个 UIView
是从 UIViewController
加载的。在最后一页,我有一个包含不同项目的UICollectionView
,当我触摸UICollectionCell
时,我想更改子视图。
这是我的故事板:
Orange UIView
加载了来自 UIViewController
s 的视图(带有 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 或其子类。以上是关于以编程方式更改子视图控制器的主要内容,如果未能解决你的问题,请参考以下文章