美文网首页
自定义控件的方式及注意

自定义控件的方式及注意

作者: 李华光 | 来源:发表于2017-04-17 17:16 被阅读0次

    一、使用纯代码的方式

    1、一般来说我们的自定义类继承自UIView,首先在initWithFrame:方法中将需要的子控件加入view中。注意,这里只是加入到view中,并没有设置各个子控件的尺寸。

    为什么要在initWithFrame:方法而不是在init方法?

    因为使用纯代码的方式创建自定义类,在以后使用的时候可能使用init方法创建,也有可能使用initWithFrame:方法创建,但是无论哪种方式,最后都会调用到initWithFrame:方法。在这个方法中创建子控件,可以保证无论哪种方式都可以成功创建。

    为什么要在initWithFrame:方法里面只是将子控件加到view而不设置尺寸?

    前面已经说过,两种方式最后都会调用到initWithFrame:方法。如果使用init方法创建,那么这个view的frame有可能是不确定的。

    2、在layoutSubviews方法中访问子控件,设置子控件的尺寸,因为此时view的frame已经确定。

    二、使用xib的方式

    用xib这种方式是需要加载xib文件的。加载xib文件有两种方法:

    // 第一种方法(较为常用)
    CYLView *view = [[[NSBundle mainBundle] loadNibNamed:@"CYLView" owner:nil options:nil] firstObject]; 
    
    // 第二种方法
    UINib *nib = [UINib nibWithNibName:@"CYLView" bundle:nil];
    NSArray *objectArray = [nib instantiateWithOwner:nil options:nil];
    CYLView *view = [objectArray firstObject];
    

    三、补充

    1、如果使用代码的方式创建控件,那么在创建时一定会调用initWithFrame:方法;如果使用xib/storyboard方式创建控件,那么在创建时一定会调用initWithCoder:方法,初始化完成后一定会调用awakeFromNib方法。

    2、无论是通过代码的方式,还是通过xib的方式,都会初始化一些值,那么我们可以将初始化的代码抽到一个方法里面,然后在initWithFrame:方法和awakeFromNib方法中分别调用这个方法。

    相关文章

      网友评论

          本文标题:自定义控件的方式及注意

          本文链接:https://www.haomeiwen.com/subject/bhntzttx.html