zoukankan      html  css  js  c++  java
  • 自定义控件时,初始化的注意事项

    重写构造方法

    init方法内,只负责添加子控件,不要设置frame,因为这里的frame初始化值为0
    (这里用init方法不合适,因为如果将创建时,不用下图中注释的方法,而用另一种方法initWithFrame,就不会调用init方法,紧接着结果导致没有创建子控件
     
    解决方法:重写initWithFrame: 方法
    但如果这样重写过后,且不调用initWithFrame: 这个方法会有影响吗?不会,依然会实现.因为init方法内部会自动调用initWithFrame:这个方法,所以以后自定义方法,建议自定义initWithXXX方法)
    通过xib或者storyboard来创建的控件不会调用这个initWithFrame方法,当用到alloc init创建控件对象,或者直接使用initWithFrame方法时会调用initWithFrame这个方法.其它时候会调用这个方法
    如果这个控件不是通过xib storyboard创建,初始化肯定会调用这个方法initWithFrame:
    如果这个控件通过xib或storyboard创建,初始化肯定会调用这个方法initWithCoder:,且初始化完毕后肯定会调用awakeFromNib:

    初始化完毕,属性才会有值
    这也是为什么下图结果为{{0, 0},{0 , 0}};

    设置子控件的frame,用苹果提供的一个方法
    这个方法会保证frame里面有值再调用
    当前控件的尺寸(size)发生改变的时候就会调用,这只是一种场合,当你一调用这个创建的自定义View,就会调用这个方法
    layoutSubview是很有价值的东西,它会让子控件自适应父控件
    [super layoutSubviews]
    父类它在这个方法里面做了一些重要的事情,如果不写,cell自带的子控件布局可能不对
    在类扩展中添加属性
    重写set方法:在set方法中取出模型属性,给对应的子控件赋值
    这里的_shop = shop,可以不写,但建议这样写,因为其它方法中可能用到属性shop,到时候可以直接拿来用
  • 相关阅读:
    PHP在yii2中封装SuperSlide 幻灯片编写自己的SuperSlideWidget的例子
    安卓界面控件屏幕居中Layout例子
    java web的开发 知识要点
    PHP MVC简单介绍,对PHP当前主流的MVC做了一个总结
    自己编写的一个有关安卓应用开发培训PPT
    springboot配置fastjson后端往前端传输格式化
    实现商城商品秒杀分析
    idea添加jdbc包
    idea心得
    gc overhead limit exceeded内存问题
  • 原文地址:https://www.cnblogs.com/qiling/p/4898668.html
Copyright © 2011-2022 走看看