zoukankan      html  css  js  c++  java
  • iOS UI基础03

    • plist文件
      • root: 代表着存储的是什么类型的数据
         如果root是array, 那么将来从文件中读取进来的就是数组
         plist中的每一个item就代表着数组中的一个元素
         item对应的类型, 就代表数组中每一个元素的类型
        
      • 自定义的plist文件的名称不能包含info这个单词,因为系统配置是info.plist
      • 获取plist文件路径
        • NSString *path = [[NSBundle mainBundle] pathForResource:@"shops.plist" ofType:nil];
    • 字典转模型

      • 原因:

        • 在开发中一般不会直接从字典中获取数据

          • 1.字典的key是一个字符串, 写错不会报错
          • 2.英语不好, 单词记不住
          • 3.由于key是一个字符串, 所以在编码的时候没有提示
        • 为了解决这个问题, 我们可以使用对象来保存数据,对象的作用就是用于存储数据, 那么我称这个对象为模型

        • 规律: 在开发中但凡看到字典, 一般情况下都会创建一个与之对应的模型来保存字典中的数据
        • 字典数组中还有字典数组 不能使用kvc进行字典转换模型
        • 一般步骤:
          • 1.获取plist文件的绝对路径
          • 2.根据路径加载plist文件
          • 3.将数组中所有的字典转换为模型
    • 自定义VIEW

      • 自定义View的步骤:
        • 1.重写初始化方法 (在里面进行一次性的初始化) xib :awakeFromNib 纯代码:initWithFrame
        • 2.重写layoutSubviews, 在里面布局子控件
        • 3.接收外界传入的数据, 重写set方法
      • 注意:
        • 如果自定义一个View, 不建议在init方法中设置子控件的位置 因为如果子控件的位置需要根据父控件的frame来计算, 在init方法中拿不到父控件的frame
      • 注意:
        • 一般情况下自定义一个控件会重写控件的initWithFrame方法, 因为用户可能通过init方法创建也可能通过initWithFrame方法创建, 为了保证无论用户通过哪一个方法创建都能添加子控件, 所以重写initWithFrame,init方法内部会调用initWithFrame
      • 注意:
        • 如果在类方法中创建对象, 建议使用self, 不要使用类名 如果直接使用类名,在有子类的时候由于父类已经写死了,所以就不能通过该方法创建子类对象
      • layoutSubviews
        • 专门用于布局子控件的位置
        • 重写layoutSubviews方法, 一定要调用[super layoutSubviews]方法 如果不调用, 会出现一些奇葩的错误
      • 重写模型set
        • 设置子控件的数据
    • 使用week保存控件的原因:

      • 只要将一个对象添加到父控件中, 那么父控件中的subViews数组就会强引用这这个控件
    • xib
      • Xib和Storyboard一样都是用来描述界面的
      • Xib是Storyboard的前身
      • Xib是用于描述一个简单的界面或者一个局部的界面
      • Storyboard是用于描述整体
      • 拿到Xib方法
      • NibName: 需要加载的xib名称 bundle: 从哪个包中查找
      • - 1.UINib *nib = [UINib nibWithNibName:@"ShopView" bundle:[NSBundle mainBundle]];
        - 创建xib中描述的所有界面
            NSArray *res = [nib instantiateWithOwner:nil options:nil];
            [self.shopsView addSubview:res.firstObject];
          2.NSArray *res = [[NSBundle mainBundle] loadNibNamed:@"ShopView" owner:nil options:nil];
            [self.shopsView addSubview:res.firstObject];
        
      • xib加载原理:
        • 1.根据custom class创建对象 JXShopView *shopView = [JXShopView alloc] init];
        • 2.根据xib中的设置, 设置控件的相关属性 shopView.backgroundColor = [UIColor redColor]; shopView.frame = CGR ectMake(0, 0, 70, 100);
        • 3.创建所有子控件, 并且设置子控件的属性
        • UIImageView iv = [[UIImageView alloc] init];
        • iv.frame = CGRectMake(0, 0, 70, 70);
        • UILabel label = [[UILabel alloc] init];
        • label.frame = CGRectMake(0, 70, 70, 30);
        • 4.检查子控件是否有连线, 如果有就进行关联 self.iconView = iv; self.nameLabel = label;
        • 5.将所有子控件添加到父控件中 [shopView addSubview:iv]; [shopView addSubview:label];
      • 注意:
        • 如果是通过xib或者Storyboard创建一个控件, 不会调用initWithFrame方法
        • 如果是通过xib或者Storyboard创建一个控件,在"创建时"会调用initWithCoder方法,调用该方法时, 控件不一定被创建好
        • 如果是通过xib或者Storyboard创建一个控件,在"创建后"会调用awakeFromNib,调用该方法时, 证明控件已经创建好了
  • 相关阅读:
    【复习笔记】数据结构-外排序
    【复习笔记】数据结构-内排序
    python os
    pyinstaller problem
    python tk Lable
    机器学习
    python pickle and json
    pycharm 快捷键
    day10_procession作业
    python fibonacci recursion review
  • 原文地址:https://www.cnblogs.com/liujiaoxian/p/4697053.html
Copyright © 2011-2022 走看看