關(guān)于用代碼實(shí)例化對象與xib實(shí)例化文件調(diào)用方法的不同

相信大部分接觸過xib與storyboard的開發(fā)者都對倆者描述控件贊不絕口,倆者的出現(xiàn)大大降低了開發(fā)者開發(fā)的時(shí)間,不用在設(shè)置UI浪費(fèi)大量的時(shí)間和維護(hù)臃腫的代碼,本文來說一說用代碼實(shí)例化對象和xib實(shí)例化對象系統(tǒng)調(diào)用方法的不同

用代碼實(shí)例化對象

  • 對于用代碼實(shí)例化一個(gè)控件(CustomView)所需要的代碼如下
CustomView *customView = [[CustomView alloc] init];

  • 此時(shí)系統(tǒng)會調(diào)用對象的init方法,如果開發(fā)者需要在對象初始化時(shí)給對象的屬性賦值就在對象的init方法中寫入即可,如下圖
   - (instancetype)init
 {
  if (self = [super init]) {
      self.backgroundColor = [UIColor blueColor];
      self.alpha = 0.5f;
      self.shopsLabel.text = @"商品";
  }
  return self;
 }

需要注意如果創(chuàng)建對象是通過initWithFrame方法是不會調(diào)用init方法
的,系統(tǒng)會自動調(diào)用initWithFrame方法,而通過init方法創(chuàng)建對象也
會調(diào)用initWithFrame方法

通過xib加載對象

  • 用xib實(shí)例化對象方法需要注意Xib的文件名最好與文件的名字相同
[[[NSBundle mainBundle] loadNibNamed:@"CustomView"
owner:nil options:nil] lastObject];
  • 此時(shí)系統(tǒng)會自動調(diào)用initWithCoder:aDecoder方法來初始化對象,而此時(shí)如果在initWithCoder:方法中設(shè)置對象屬性
  - (instancetype)initWithCoder:(NSCoder *)aDecoder
{
   if (self = [super initWithCoder:aDecoder]) {
       self.backgroundColor = [UIColor blueColor];
       self.alpha = 0.5f;
       self.shopLabel.text = @"商品";
   }
   return self;
}
  • 此時(shí)會發(fā)現(xiàn)對內(nèi)部shopLabel.text設(shè)置沒有作用。因?yàn)閷ο髢?nèi)部控件還沒有實(shí)例化(也就是還沒有被連線)需要在Xib文件加載完畢后才可以設(shè)置,解決方法是在awakeFromNib設(shè)置參數(shù)屬性,如下圖
  - (void)awakeFromNib
{
   self.shopLabel.text = @"商品";
}

文章比較短,希望可以幫助到遇到此問題的朋友

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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