美文网首页iOSiOS开发xib,storyboard,autolayout
关于用代码实例化对象与xib实例化文件调用方法的不同

关于用代码实例化对象与xib实例化文件调用方法的不同

作者: Top_熊 | 来源:发表于2015-05-31 00:37 被阅读3021次

    相信大部分接触过xib与storyboard的开发者都对俩者描述控件赞不绝口,俩者的出现大大降低了开发者开发的时间,不用在设置UI浪费大量的时间和维护臃肿的代码,本文来说一说用代码实例化对象和xib实例化对象系统调用方法的不同

    用代码实例化对象

    • 对于用代码实例化一个控件(CustomView)所需要的代码如下
    CustomView *customView = [[CustomView alloc] init];
    
    
    • 此时系统会调用对象的init方法,如果开发者需要在对象初始化时给对象的属性赋值就在对象的init方法中写入即可,如下图
       - (instancetype)init
     {
      if (self = [super init]) {
          self.backgroundColor = [UIColor blueColor];
          self.alpha = 0.5f;
          self.shopsLabel.text = @"商品";
      }
      return self;
     }
    

    需要注意如果创建对象是通过initWithFrame方法是不会调用init方法
    的,系统会自动调用initWithFrame方法,而通过init方法创建对象也
    会调用initWithFrame方法

    通过xib加载对象

    • 用xib实例化对象方法需要注意Xib的文件名最好与文件的名字相同
    [[[NSBundle mainBundle] loadNibNamed:@"CustomView"
    owner:nil options:nil] lastObject];
    
    • 此时系统会自动调用initWithCoder:aDecoder方法来初始化对象,而此时如果在initWithCoder:方法中设置对象属性
      - (instancetype)initWithCoder:(NSCoder *)aDecoder
    {
       if (self = [super initWithCoder:aDecoder]) {
           self.backgroundColor = [UIColor blueColor];
           self.alpha = 0.5f;
           self.shopLabel.text = @"商品";
       }
       return self;
    }
    
    • 此时会发现对内部shopLabel.text设置没有作用。因为对象内部控件还没有实例化(也就是还没有被连线)需要在Xib文件加载完毕后才可以设置,解决方法是在awakeFromNib设置参数属性,如下图
      - (void)awakeFromNib
    {
       self.shopLabel.text = @"商品";
    }
    

    文章比较短,希望可以帮助到遇到此问题的朋友

    相关文章

      网友评论

      • 794383cae033:请问在用swift中的情况下是怎样的呢
        Top_熊:@嘻哈peter 一样的
      • iOS_愛OS:不错,每天看简书首页,感觉简书都被程序员给占领了,尤其是iOS

      本文标题:关于用代码实例化对象与xib实例化文件调用方法的不同

      本文链接:https://www.haomeiwen.com/subject/getdqttx.html