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,调用该方法时, 证明控件已经创建好了
时间: 2024-08-25 03:54:50

iOS UI基础03的相关文章

iOS UI基础-9.0 UITableView基础

在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView.UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳. UITableView有两种样式: 一列显示:UITableViewStylePlain 分组显示:UITableViewStyleGrouped tableView展示数据的过程 1.调用数据源的下面方法得知一共有多少组数据 - (NSInteger)numberOfSectionsInTableView:(UITableView

iOS UI基础-17.0 UILable之NSMutableAttributedString

在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想.后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现. NSMuttableAttstring 方法 为某一范围内文字设置多个属性 - (void)setAttributes:(NSDictio

iOS UI基础-1.0加法计算器

1.打开Xcode,新建一个项目 2.Single View Application是最适合初学者的模板 3.填写该应用相关信息 4.搭建UI界面 项目创建完毕后,自动帮我们做了很多配置,也自动生成了很多文件 还自动添加了开发所依赖的框架 项目中这么多文件,哪些是影响着UI界面的呢?在iOS5之前,苹果使用xib文件来描述UI界面,在iOS5之后,苹果采取了更加强大和先进的storyboard文件来描述界面(Xcode5是基于iOS7的)因此,可以得出结论:修改项目中的Main.storyboa

IOS UI基础04

动画 1.头尾式动画 动画开始 [UIView beginAnimations:nil context:nil]; 设置动画时间 [UIView s ! etAnimationDuration:3]; [UIView setAnimationDelegate:self]; 只要写在开始和结束之间的代码, 就会被执行动画 但是: 并不是所有的代码都能够执行动画 只有属性声明中说明了是animatable的属性,才可以执行UIView动画 CGRect tempFrame2 = self.hudLa

iOS UI基础01

控制器 1.什么是控制器: 任何继承于UIViewController的类, 都称之为控制器 2.控制器的作用: 管理UI界面(负责管理UI界面的创建和一些事件的处理) IBAction 连线方式 1.从"控制器"往"Storyboard"连线 2.从"Storyboard"往"控制器"连线 3.直接在"Storyboard"中往"Storyboard"上的界面顶部连线 4.直接在&qu

iOS UI基础-13.0 数据存储

应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer) 模拟器应用沙盒的根路径在: (apple是用户名, 6.0是模拟器版本) /Users/apple/Library/Application Support/iPhone Simulator/6.0/Applications 应用沙盒结构分析 应用程序包:(上图中的Layer)包含了所有的资源

iOS UI基础-6.0 UIActionSheet的使用

UIActionSheet是在iOS弹出的选择按钮项,可以添加多项,并为每项添加点击事件. 使用 1.需要实现UIActionSheetDelegate  协议 @interface NJWisdomCardDetailViewController ()<UIActionSheetDelegate> @end 2.弹出选择按钮框 - (void)showSheet{ UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitl

iOS UI基础控件之UIImageView

一.UIImageView和UIImage UIImageView是iOS中用于显示图片的类,UIImage是用于存储图片数据的类:iOS中几乎所有看到的图片数据都存储在UIImage中,同时所要的图片都是用UIImageView来显示:UIImageView和UIImage关系如下图: 二. 创建UIImageView的两种方式 1.自己设置图片位置和尺寸 "` UIImageView *iv = [[UIImageView alloc] init]; //创建的图片, 没有默认的宽高 iv.

iOS UI基础控件之UIView 详解

UIView 简介 什么是UIView UIView是窗口上的一块区域,是iOS中所有控件的基类,我们在app中所有能看见的都是直接或间接继承与UIView的.我们把UIView叫做视图. UIView的作用 负责内部区域的内容渲染. 负责内部区域的触摸事件. 管理本身的所有子视图. 处理基本的动画. UIView创建与使用 创建UIView //通过frame创建View UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100,