自定義控件的步驟和注意點(diǎn).
純代碼創(chuàng)建:
- 重寫initWithFrame(init方法內(nèi)部會調(diào)用這個(gè)方法),你如果只是重寫init方法的話,使用者可能會調(diào)用initWithFarme方法,就不會走你的代碼了.
- 重寫initWithCoder(xib和storyBoard會調(diào)動(dòng)這個(gè)方法)
- 主要在自定義的類archive歸檔序列化的時(shí)候?qū)崿F(xiàn)NSCoding協(xié)議使用的.
- 那么在xib文件代碼初始化里面經(jīng)常出現(xiàn)的initWithCoder可以解釋了,因?yàn)閤ib文件涉及非基本類型的數(shù)據(jù)存儲,自然也要實(shí)現(xiàn)encodeWithCoder和initWithCoder兩個(gè)方法,encodeWithCoder方法不需要我們調(diào)用,但是initWithCoder還是經(jīng)常需要用的,所以開放來出來。
- 在initWithCoder:里面訪問屬性,比如self.button,會發(fā)現(xiàn)它是nil的,因?yàn)榇藭r(shí)自定義控件正在初始化,self.button可能還未賦值.所以建議在awakeFromNib方法中進(jìn)行初始化的額外操作。因?yàn)閍wakeFromNib是在初始化完成后調(diào)用,所以在這個(gè)方法里面訪問屬性(IBOutlet)就可以保證不為nil。** 意思就是在initWithCoder中正在生成控件,在awakeFrameNib中控件已經(jīng)被生成了,就可以正常訪問了. **
- 在layoutSubviews中進(jìn)行相關(guān)布局
- 給出自定義控件的數(shù)據(jù)變量供外界修改.
- 對外接口中可以將一些控件的屬性變量開發(fā),共使用者改變.如輪播器的Lable是否顯示隱藏.顯示的數(shù)量等等.
這個(gè)里面都要調(diào)用setupUI方法保證使用者通過任何方式創(chuàng)建(不管純代碼和是storyBoard和xib都能夠得到這個(gè)控件)
xib創(chuàng)建:可以省去initWithframe和layoutSubviews,因?yàn)樵趚ib中完成了.
- 對外提供數(shù)據(jù)接口