美文网首页
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文件的加载方法

    如果想要一个对象一初始化出来属性中就有某些值,那么我们就可以重写他的构造方法(init方法) 懒加载 数据用到时才...

  • 控制器加载底层原理和UI初始化过程

    1、带xib控制器加载过程 结果: 2、带xib文件,重写loadView方法。不会加载出来这个xib文件。如果不...

  • 04-UI基础第4天

    一、xib文件的加载过程 默认调用init方法后,自动调用initWithFrame方法 xib的加载不会调用in...

  • 字典转模型详解

    第一级别 加载plist文件,直接面对字典开发 设置plist文件(死数据):plist文件 加载plist以及面...

  • Swift SnapKit获取真实frame

    一.通过协议方法款速加载xib中的view1.首先创建对应的xib和view文件2.创建协议文件,NibLoad....

  • 1.3 UI基础-scrollview

    加载Xib文件 方法1 NSArray *objs = [[NSBundle mainBundle] loadNi...

  • xib文件加载控制器View的一些原理

    -- 通过加载xib文件来描述控制器的View的总结: loadView方法: 如果你指定了具体的xib文件,则系...

  • 03-UI基础第3天

    一、xib文件 加载xib文件:xxx.xib --> 编译 --> xxx.nib 方式一: 方式二:

  • iOS学习笔记3

    Plist文件 加载Plist文件先获取文件路径在将Plist文件传入数组或者字典中 常见问题 项目中某个.m文件...

  • iOS xib文件加载控制器View的一些原理

    通过加载xib文件来描述控制器的View的总结: loadView方法: 如果你指定了具体的xib文件,则系统会优...

网友评论

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

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