美文网首页
plist文件和xib文件的加载方法

plist文件和xib文件的加载方法

作者: winlee | 来源:发表于2016-07-31 02:29 被阅读106次

    如果想要一个对象一初始化出来属性中就有某些值,那么我们就可以重写他的构造方法(init方法)

    - (instancetepy) init{
    
         if(self=[super  init]){
                  //初始化属性
                  }
                  return  self;
    }
    

    懒加载

    • 数据用到时才加载

    为了防止重写控件初始化方法不成功,会采用下面这样的双保险写法只要才用这种写法,无论控件是如何创建的都会成功重写控件的初始化方法

    /**
     *控件属性设置方法
     */
    - (void) setup
    {
        //初始化控件的那些属性
    }
    /**
     *重写控件initWithFrame:(CGRect)frame初始化方法,
     这个方法只要控件是通过代码创建的,那么就会在控件初始化时调用这个方法
     */
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if (self=[super initWithFrame:frame]) {
            [self setup];
        }
        return self;
    }
    /**
     *重写控件awakeFromNib初始化方法,
     这个方法只要控件是通过Xib或storyboard创建的,那么就会在控件初始化时调用这个方法
     */
    - (void)awakeFromNib
    {
        [self setup];
    }
    

    通过代码创建自定义控件

    • 通过创建类,来写一个自定义控件,并且继承于系统自带的控件
    • 目的:封装控件内部的细节,不让控制器知道
    • 步骤:
      • 新建一个继承系统控件的类
      • 在initWithFrame方法中添加子控件
      • 在layoutSubviews方法中这只子控件的frame
        • 在layoutSubview方法中,一定要调用[super layoutSubviews]
      • 提供一个模型属性,重写模型属性的set方法
        • 在重写set方法中,取出模型的属性给对应子控件赋值

    通过Xib自定义控件

    • 新建一个继承自系统控件的自定义控件类
    • 新建一个Xib文件 (文件名一定要和自定义控件类类名一致,方便别人阅读代码)
      • 修改xib主控件的Class类名,和他相匹配的自定义控件类名一致
      • 往主控件中添加子控件,设置子控件属性
      • 在自定义控件的.m文件中,添加类扩展
      • 通过xib到自定义控件类.m文件类扩展的连线,把xib子控件添加到类扩展的属性中
    • 在自定义控件类.h文件中添加模型属性,重写模型属性的set方法
      • 在重写set中,把模型的属性赋值给子控件

    通过以上对比我们得出结论

    • 通过xib自定义控件相比于通过代码自定义控件,节省了两个步骤
      1.减少了通过initWithFrame方法中添加子控件的步骤
      2.减少了通过layoutSubviews方法中这只子控件的framed步骤

    plist文件和xib文件的加载方法

    • 获取plist文件的全路径方法
      • 用到了- (nullable NSString *)pathForResource:(nullable NSString *)name ofType:(nullable NSString *)ext;
        NSString * file=[[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"];
        //把plist文件中的数组给dictArray
        NSArray * dictArray=[NSArray arrayWithContentsOfFile:file];
    
    • 获取xib文件的全路径方法
    • 获取xib文件的方法:- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options
        WLSubView *subView=[[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self)
        owner:nil options:nil] firstObject];
    

    神奇三部曲给结构体赋值

        CGRect  tempFrame=self.imageView.frame;
        tempFrame.size.width=0;
        tempFrame.size.height=0;
        self.imageView.frame=tempFrame;
    

    相关文章

      网友评论

          本文标题:plist文件和xib文件的加载方法

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