6.9
通篇讲HomeViewController
结构剖析:
成员变量:
@property(nonatomic,strong)IBOutlet TitleView *search; //搜索的text
@property(nonatomic,strong)IBOutlet UIImageView *searchbg; //搜索的bg
@property(nonatomic,strong)IBOutlet UIImageView *msgView; //站内信的image
@property(nonatomic,strong)IBOutlet HomeView *homeView;
/*
*涵盖了banner,adzone,横向栏快抢商品,几大板块商品,collectionviewcell的单个商品
*/
@property(nonatomic,strong)MainData* mianData; //bean
@property(nonatomic,assign)int requestCount; //count
//消息数量层
@property(nonatomic,strong)IBOutlet UIView *dotMsgView; //站内信dot
//消息数量
@property(nonatomic,strong)IBOutlet UILabel *numMsgView; //站内信数量
@property(nonatomic,strong)BaseViewController* homeTk; //homeviewvc
@property(nonatomic,strong)BannerData* adData; //banner的bean
Functions:按照vc的代码执行顺序,或者func的类型来写
1.-(void)initDatas
-->隐藏HomeView;分别给搜索和站内信这2个功能设置监听
eg:
1.nib和xib都是一种资源文件,以前apple都是nib,现在默认都是xib,xib是可以编辑的文档文件,但是无论nib还是xib,编译之后,都会变成一个二进制的nib文件
2.这里关于viewcontroller的生命周期,是绝对需要掌握的:
ARC环境
- 单个viewController的生命周期
- initWithCoder:(NSCoder *)aDecoder:(如果使用storyboard或者xib)
- loadView:加载view
- viewDidLoad:view加载完毕
- viewWillAppear:控制器的view将要显示
- viewWillLayoutSubviews:控制器的view将要布局子控件
- viewDidLayoutSubviews:控制器的view布局子控件完成
这期间系统可能会多次调用viewWillLayoutSubviews 、 viewDidLayoutSubviews 俩个方法
- viewDidAppear:控制器的view完全显示
- viewWillDisappear:控制器的view即将消失的时候
这期间系统也会调用viewWillLayoutSubviews 、viewDidLayoutSubviews 两个方法
- viewDidDisappear:控制器的view完全消失的时候
所以,这里initData的命令表述不太形象,这里的initData就是vc的view加载完毕,但是一个vc肯定有很多个控件,那么这些控件,是用那一对方法,多次加载出来的。
2.-(void)initViews
只调用一次
-->先initData再initView;配置search这个view的位置和形状;多线程调接口,通过调各种接口获取数据来更新ui.
3.-(void)updateMsg
-->对站内信的圆点和数字view刷新显示
4.-(void)requestDatas
-->多线程分发事件(处理耗时操作)调接口,这里调了很多接口后续我们会看到接口方法 ;
5.-(void)reqMain
-->调接口,这里也是调了很多接口;
6.-(void)setCurContentView
-->显示homeview,然后开始用调接口返回的数据来显示view
eg:
这里有一点要注意的是,HomeView这里是个view,而HomeViewController是controller,这2个东西的initData在Base父类里面完全不一样,别搞混淆了。
BaseUIView里面有layoutSubviews,这里必须补充一下UIView的布局方法(layout方法)
-(void)layoutSubviews这个方法在本demo中就就运行一次,具体这个方法的运行场景如下:
1.直接调用setLayoutSubviews
2.addSubview的时候触发layoutSubviews
3.当view的frame发生改变的时候触发layoutSubviews
4.第一次滑动UIScrollView的时候触发layoutSubviews
5.旋转Screen会触发父UIView上的layoutSubviews事件
6.改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
注意:
init初始化不会触发layoutSubviews,但是使用initWithFrame进行初始化时,当rect的值不为CGRectZero时,也会触发。
补充点小知识:
frame:描述当前视图在其父视图中的位置和大小
bounds:描述当前视图在其自身坐标系统中的位置和大小。
center:描述当前视图的中心点在其父视图中的位置
7.+(void)showUpdate
-->调接口,检测版本,然后是否升级,一般大部分app,都是集成的三方平台的更新
8.-(void)showChaping:(BannerData*)banner
-->从本vc里面获得子vc;然后给插屏的图片和插插设置监听;用第三方的一个库,给这UIImageView加载url图片
eg:
UIController有一个子类:tabBarController,这儿的意思是,当这个第三库,加载完网络图片以后,还有一个回调的block
completed以后有image,error,cacheType,cacheType,这里只需要image对象,然后用self的vc子类vc的UITabBarController的一个vc来弹出插屏
[tabbarCv presentViewController:_homeTk animated:YES completion:^{
}];
现在觉得,ios的语法其实很好懂,其实android的也好懂,只不过之前自己道行太浅
9.-(void)toGetHomeTk:(id)sender
-->点击插屏图片,跳转到web的一个view
10.-(void)clickClose:(id)sender
-->点击❌
11.-(void)clickSearch:(id)sender
-->点搜索
12.-(void)clickMsg:(id)sender
-->点击站内信
13.-(void)viewWillAppear:(BOOL)animated
-->在HomeView第一次加载的时候在HomeView的方法里面刷新一下view
14.-(void)viewDidAppear:(BOOL)animated
-->如果需要更新首页数据,就刷新;如果是从外部进来的话,自动显示是否搜索的dialog
15.-(void)viewWillDisappear:(BOOL)animated
-->这个view将要消失的时候
7.0
下一篇7.0通篇来讲一下首页HomeView的结构,方法