自定義控件(通過(guò)代碼或者xib文件)


一、通過(guò)代碼來(lái)自定義控件

  • 繼承自系統(tǒng)自帶的控件,寫(xiě)一個(gè)屬于自己的控件

  • 目的:封裝控件內(nèi)部的細(xì)節(jié),不讓外界關(guān)心

  • 步驟

    • 1、新建一個(gè)繼承UIView的類(lèi)
      新建的類(lèi)
    • 2、在initWithFrame:方法中添加子控件
      initWithFrame:
    • 3、在layoutSubviews方法中設(shè)置子控件的frame
      • 一定要調(diào)用[super layoutSubviews]方法;
        layoutSubviews
    • 4、在新建的類(lèi)中提供一個(gè)模型屬性,并重寫(xiě)模型屬性的set方法
      • 在set方法中取出模型屬性,給對(duì)應(yīng)的子控件賦值


        setter
  • 注意點(diǎn)

    • init方法:初始化方法
    • 與initWithFrame:方法:初始化方法,執(zhí)行此方法時(shí)調(diào)用一次init方法,所以最好在這個(gè)方法里面添加子控件(xib自定義控件不會(huì)調(diào)用這個(gè)方法)
  • 總結(jié):

  • 外界需要做得事情:

    • 1、創(chuàng)建控件(自定義的控件);
    • 2、設(shè)置控件的frame;
    • 3、將控件添加到父控件上(一般是控制器的view);
    • 4、給控件傳遞模型數(shù)據(jù);
  • 內(nèi)部需要做得事情:

    • 1、提供initWithFrame:方法來(lái)添加子控件;
    • 2、提供layoutSubviews方法來(lái)添加子控件;
    • 3、重寫(xiě)set方法(在這里為子控件設(shè)置數(shù)據(jù));

二、通過(guò)xib文件來(lái)自定義控件

  • 新建一個(gè)繼承UIView的類(lèi)
  • 新建一個(gè)xib文件(xib的文件名最好跟控件類(lèi)名一樣)
    • 添加子控件、設(shè)置子控件屬性
    • 修改最外面那個(gè)控件的class為控件類(lèi)名
    • 將子控件進(jìn)行連線(xiàn)
  • 在新建的類(lèi)里面加載xib文件:
    • 方法一:
[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil]
  • 方法二:
[UINib nibWithNibName:NSStringFromClass(self) bundle:nil];
  • 提供模型屬性,重寫(xiě)模型的set方法

    • 在set方法中給子控件設(shè)置數(shù)據(jù)
  • 注意

    • 1、通過(guò)xib文件來(lái)自定義控件是,不會(huì)調(diào)用init,initWithFrame:方法;
    • 2、幾個(gè)方法的調(diào)用順序:
//第一:正在準(zhǔn)備初始化
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]) {
        NSLog(@"initWithCoder");
    }
    return self;
}
//第二:初始化完畢`(若想初始化時(shí)做點(diǎn)事情,最好在這個(gè)方法里面實(shí)現(xiàn))`
-(void)awakeFromNib
{
    NSLog(@"awakeFromNib");
}
//第三:加載xib文件
XMGShopView *shopView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 使用純代碼的方式 一般來(lái)說(shuō)我們的自定義類(lèi)繼承自UIView,首先在initWithFrame:方法中將需要的子控件...
    ForeverYoung21閱讀 22,078評(píng)論 26 103
  • 掌握 UIView的常見(jiàn)屬性和方法 九宮格計(jì)算方法 字典轉(zhuǎn)模型 Xib的使用 自定義view(view的封裝) 簡(jiǎn)...
    JonesCxy閱讀 1,512評(píng)論 1 3
  • 1.自定義控件 a.繼承某個(gè)控件 b.重寫(xiě)initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,698評(píng)論 2 4
  • 使用xib自定義一個(gè)簡(jiǎn)單的控件 XMGShopView xib效果圖: 運(yùn)行時(shí)效果圖: xib自定義控件的創(chuàng)建方法...
    生如夏花逝如秋葉閱讀 8,641評(píng)論 0 11
  • 碎碎念:我是一個(gè)特別多夢(mèng)的人,經(jīng)常夢(mèng)見(jiàn)很多奇怪的情節(jié),清醒之后總能記得夢(mèng)里發(fā)生的事情。所以把內(nèi)容大概記錄在此,多是...
    舒嘉儀閱讀 263評(píng)論 0 0

友情鏈接更多精彩內(nèi)容