1. 程式人生 > >IOS使用Xib建立自定義View

IOS使用Xib建立自定義View

  1. 新建object-c類,從UIView繼承,如新建FlagView

    #import <UIKit/UIKit.h>
    
    @class FlagBean;
    
    @interface FlagView : UIView
    
    @property(nonatomic,weak)FlagBean  *flag;
    
    +(instancetype)flagView;
    
    @end
    

    FlagView.m檔案
    #import "FlagView.h"
    #import "FlagBean.h"
    
    @interface FlagView ()
        @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
        @property (weak, nonatomic) IBOutlet UIImageView *imageHead;
    @end
    
    @implementation FlagView
    
    /*
    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    - (void)drawRect:(CGRect)rect {
        // Drawing code
    }
    */
    
    
    +(instancetype)flagView{
        return [[[NSBundle mainBundle] loadNibNamed:@"FlagView"
                                              owner:nil options:nil]lastObject];
    }
    
    
    - (void)setFlag:(FlagBean *)flagbean{
        _flag = flagbean;
        self.nameLabel.text = flagbean.name;
        self.imageHead.image = [UIImage imageNamed:flagbean.icon];
    
    }
    
    
    @end

    注意:預設自己通過繼承UIView建立的自定義View ,在m檔案中是沒有如下的程式碼的,需要自己新增,如:
    @interface FlagView ()
        @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
        @property (weak, nonatomic) IBOutlet UIImageView *imageHead;
    @end
    

    當然上面的@property中的內容是需要從xib中建立引用的。
  2. 新建一個同名xib檔案,修改File's Owner的Custom Class為新建的自定義view類名

  3. 將xib檔案中的view連結到自定義view中

  4. 在xib檔案裡可以加入其它系統控制元件,並連線到自定義view類中

    注意:如要在xib檔案的右上角的屬性欄中指明class 是“FlagView”,

    要不然只能寫如下程式碼:

    - (void)awakeFromNib
    {
        [[NSBundle mainBundle] loadNibNamed:@"FaceView" owner:self options:nil];
        [self addSubview:self.contentView];
    }

  5. 在storyboard中加入一個通用view控制元件,並指定Custom Class為自定義view類,按control連線到viewcontroller類中

  6. 在外部引用的時候:

     FlagView *flagView = [FlagView flagView];
        flagView.bounds = CGRectMake(0, 0, 200, 80);


  1. 2 3 4 5 - (void)awakeFromNib { [[NSBundle mainBundle] loadNibNamed:@"FaceView" owner:self options:nil]; [self addSubview:self.contentView]; }