14-ios_Demo-3

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的结构,方法

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值