解决UIViewController中添加子控制器viewWillAppear不调用问题
问题描述:
我在UICollectionViewController中添加子控制器数组, 并在cellForItem中把子控制器数组中对应的控制器对应的view添加到了UICollectionViewControllerCell的contentView中去了, 但是在运行的时候, 发现首个子控制器的viewWillAppear方法不调用.
原因: 通过addsubview的方法会延时加载, viewWillAppear方法会被跳过.
解决方案:
// 在viewDidLoad方法中addChildViewController:
- (void)viewDidLoad {
[super viewDidLoad];
// 添加子控制器
[self setupAllChildViewController];
}
#pragma mark - 添加所有的子控制器
- (void)setupAllChildViewController
{
// 每日任务
DayJobWebController *dayJobVC = [[DayJobWebController alloc] init];
[self addChildViewController:dayJobVC];
[dayJobVC beginAppearanceTransition:YES animated:YES];
// 基本任务
BaseJobWebController *baseJobVC = [[BaseJobWebController alloc] init];
[self addChildViewController:baseJobVC];
[dayJobVC beginAppearanceTransition:YES animated:YES];
}
注: 子控制器调用beginAppearanceTransition方法之后就会调用其viewWillAppear.
// 在cellForItem中添加控制器的View到cell的contentView:
// 移除其它子控制器view
for (UIViewController *vc in self.childViewControllers) {
[vc beginAppearanceTransition:NO animated:YES];
[vc.view removeFromSuperview];
[vc endAppearanceTransition];
}
// 添加对应的子控制器view 到 对应cell
UIViewController *vc = self.childViewControllers[indexPath.row];
// 添加到contentView
[cell.contentView addSubview:vc.view];
注: 移除子控制器的时候, 要确保viewWillDisappear和viewDidDisappear被调用, 需调用控制器的beginAppearanceTransition:animated:方法和endAppearanceTransition方法.
解决UIViewController中添加子控制器viewWillAppear不调用问题的更多相关文章
- 006.Adding a controller to a ASP.NET Core MVC app with Visual Studio -- 【在asp.net core mvc 中添加一个控制器】
Adding a controller to a ASP.NET Core MVC app with Visual Studio 在asp.net core mvc 中添加一个控制器 2017-2-2 ...
- 关于cell中添加子视图 复用重叠问题的解决方法
问题本质: 因为你要添加的子视图并不是在自定义的cell中实现的,而是根据系统给的UITableViewCell这个类创建的实例,每次进图 cellForRow方法都会创建一个cell,每次都要创 ...
- iOS开发-在表单元中添加子视图
#import <UIKit/UIKit.h> @interface NameAndColorCellTableViewCell : UITableViewCell @property(c ...
- 解决winform中mdi子窗体加载时显示最大化最小化按钮的方法
场景:在mid加载子窗体的时候如果指定WindowState为Maximized,加载完成后主窗体会显示最大化.最小化.关闭的按钮图标. 解决方法: 1.更改主窗体FormMain的属性.制定Main ...
- ViewController添加子控制器 并且弹出
/** * 初始化子控制器 */ - (void)setupChildVcs { for (int i = 0; i<6; i++) { UIViewController *vc = [[UI ...
- MFC解决View中添加控件闪烁
一.简介 我们经常会在我们的View类中添加各种类型的控件,列表控件就是最常用的了.但是我们发现添加控件的时候会,在窗口变化的时候会导致各种各样的闪烁,让我们烦恼异常.所以我对此找到新的解决方案. 二 ...
- iOS: 在UIViewController 中添加Static UITableView
如果你直接在 UIViewController 中加入一个 UITableView 并将其 Content 属性设置为 Static Cells,此时 Xcode 会报错: Static table ...
- UIViewController添加子控制器(addChildViewController)
// // TaskHallViewController.m // yybjproject // // Created by bingjun on 15/10/27. // Copyright ...
- iOS9,导航控制器中的子控制器设置StatusBar状态失效的问题
iOS9之前控制StatusBar的两种方式: 第一种方式:全局控制StatusBar 1. 在项目的Info.plist文件里设置UIViewControllerBasedStatusBarAppe ...
随机推荐
- textarea禁止拖拽
<textarea style="resize:none;" ></textarea>'
- 遇到ANDROID “call to opengl es api with no current context”错误
延迟线程执行 Timer timer=new Timer();//实例化Timer类 timer.schedule(new TimerTask(){ public void run(){ buyed( ...
- 『转』MarsEdit快速插入源代码
开始用MarsEdit来写博文,客户端的,毕竟是要方便的多啊. 遇到的第一个问题就是:MarsEdit没有提供快速插入源代码的工具,而对于我这枚码农而言,这个就有点太杯具了. 简单研究了一下,发现Ma ...
- VB6之HOOK技术
代码背景,自身程序的窗口上有一个TextBox,Hook住WH_CALLWNDPROC用来截获EN_CHNAGE即文本变更的消息. *这个其实用SetWindowLong和CallWindowProc ...
- tp框架为什么验证码加载不出来?----- ob_clean() 可解决
在用tp做验证码时,代码逻辑都正确,但就是加载不出图片来,如何解决呢?在创建验证码之前加上 ob_clean(); public function haha(){ ob_clean(); $v = n ...
- [javascript 实践篇]——那些你不知道的“奇淫巧技”
1. 空(null, undefined)验证 刚开始,我是比较蠢的验证(我还真是这样子验证的) if (variable1 !== null || variable1 !== undefined | ...
- 一颗简单的JDBC栗子
前言:安装好数据库之后,我们编写的java程序是不能直接使用数据库的,而JDBC(Java Database Connectivity,即java数据库连接)是java语言里用来规范客户端程序访问数据 ...
- MySql单表最大8000W+ 之数据库遇瓶颈记
前言 昨晚救火到两三点,早上七点多醒来,朦胧中醒来发现电脑还开着,赶紧爬起来看昨晚执行的SQL命令结果.由于昨晚升级了阿里云的RDS,等了将近两个小时 还在 升降级中,早上阿里云那边回复升级过程中出现 ...
- 关于net mail组件ssl端口问题
最近开发一个项目使用到.net mail组件发送邮件.在开发环境中一切正常,可是部署到阿里云服务器上死活发送不出去,一直连接不上,或者报语法错误. 然后是各种折腾,各种测试,最后发现,使用ssl的时候 ...
- 20170722_php_单例模式
<?php class myClass{ private static $obj = null; private function __construc(){ } public static f ...