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

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

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

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

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

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

通過xib加載對(duì)象

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

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

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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