美文网首页
1.关于xib创建控件以及代码创建控件走的方法

1.关于xib创建控件以及代码创建控件走的方法

作者: 娘亲Joanna | 来源:发表于2018-05-22 10:45 被阅读14次
    • 1.当控件不是从xib、storyboard中创建时,会调用这个方法
    
    //纯代码调用初始化一定会调用的类
    - (instancetype)initWithFrame:(CGRect)frame
    {
    
        self = [super initWithFrame:frame];
        if (self) {
            [self addGesture];
        }
        return self;
    }
    
    
      1. 当控件是从xib、storyboard中创建时,就会调用这个方法。
    // xib 这个方法只是有了self 而self内部的控件还是nil
    - (instancetype)initWithCoder:(NSCoder *)aDecoder
    {
        if (self = [super initWithCoder:aDecoder]) {
                 [self addGesture];
        }
        return self;
    }
    /// xib 这个方法只是有了self 而self内部的控件也已经存在
    - (void)awakeFromNib
    {
        [super awakeFromNib];
        [self addGesture];
    }
    
    这个方法在initWithCoder:方法后调用 ,顺序是:initWithCoder  -> awakeFromNib 
    
     
    
      1. 总结

    1、在viewDidLoad之前,由于是storyboard上创建的类,会先执行好,且会顺序走 initWithCoder、awakeFromNib两个方法

    2、到viewDidLoad之后,执行到用代码创建的view,只会走 initWithFrame 方法

    最后总结:

    1、initWithFrame只适用纯代码创建时调用,不涉及xib或storyboard。

    2、initWithCoder、awakeFromNib是从xib、storyboard中创建时会调用。

    3、所以一般来说,为了安全起见,初始化控件的代码我们写在一个方法里面(类似我上面的initViews方法),然后我们分别在initWithFrame和initWithCoder中都调用一下,这样就保证了无论你是通过什么方式创建的控件,代码都能起到作用。

    相关文章

      网友评论

          本文标题:1.关于xib创建控件以及代码创建控件走的方法

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