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


一、通過代碼來自定義控件

  • 繼承自系統自帶的控件,寫一個屬于自己的控件

  • 目的:封裝控件內部的細節,不讓外界關心

  • 步驟

    • 1、新建一個繼承UIView的類
      新建的類
    • 2、在initWithFrame:方法中添加子控件
      initWithFrame:
    • 3、在layoutSubviews方法中設置子控件的frame
      • 一定要調用[super layoutSubviews]方法;
        layoutSubviews
    • 4、在新建的類中提供一個模型屬性,并重寫模型屬性的set方法
      • 在set方法中取出模型屬性,給對應的子控件賦值


        setter
  • 注意點

    • init方法:初始化方法
    • 與initWithFrame:方法:初始化方法,執行此方法時調用一次init方法,所以最好在這個方法里面添加子控件(xib自定義控件不會調用這個方法)
  • 總結:

  • 外界需要做得事情:

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

    • 1、提供initWithFrame:方法來添加子控件;
    • 2、提供layoutSubviews方法來添加子控件;
    • 3、重寫set方法(在這里為子控件設置數據);

二、通過xib文件來自定義控件

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

    • 在set方法中給子控件設置數據
  • 注意

    • 1、通過xib文件來自定義控件是,不會調用init,initWithFrame:方法;
    • 2、幾個方法的調用順序:
//第一:正在準備初始化
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]) {
        NSLog(@"initWithCoder");
    }
    return self;
}
//第二:初始化完畢`(若想初始化時做點事情,最好在這個方法里面實現)`
-(void)awakeFromNib
{
    NSLog(@"awakeFromNib");
}
//第三:加載xib文件
XMGShopView *shopView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 使用純代碼的方式 一般來說我們的自定義類繼承自UIView,首先在initWithFrame:方法中將需要的子控件...
    ForeverYoung21閱讀 21,890評論 26 103
  • 掌握 UIView的常見屬性和方法 九宮格計算方法 字典轉模型 Xib的使用 自定義view(view的封裝) 簡...
    JonesCxy閱讀 1,404評論 1 3
  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,484評論 2 4
  • 使用xib自定義一個簡單的控件 XMGShopView xib效果圖: 運行時效果圖: xib自定義控件的創建方法...
    生如夏花逝如秋葉閱讀 8,582評論 0 11
  • 碎碎念:我是一個特別多夢的人,經常夢見很多奇怪的情節,清醒之后總能記得夢里發生的事情。所以把內容大概記錄在此,多是...
    舒嘉儀閱讀 220評論 0 0