instancetype,xib文件的使用

一、instancetype

•instancetype在类型表示上,跟id一样,可以表示任何对象类型

•instancetype只能用在返回值类型上,不能像id一样用在参数类型上

•instancetype比id多一个好处:编译器会检测instancetype的真实类型

二、Xib文件的使用

•Xib文件可以用来描述某一块局部的UI界面

•Xib文件的加载

Ø方法1

NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"JHAppView" owner:nil options:nil];

这个方法会创建xib中的所有对象,并且将对象按顺序放到objs数组中

(如果xib如上图所示,那么objs数组中依次会有3个对象:1个UIView、1个UIButton、1个UISwitch)

Ø方法2

bundle参数可以为nil,默认就是main bundle

UINib *nib = [UINib nibWithNibName:@"JHAppView" bundle:[NSBundle mainBundle]];

NSArray *objs = [nib instantiateWithOwner:nil options:nil];

•在开发阶段,面向开发者的是xib文件; 当把应用装到手机上时,xib文件就会转为nib文件

•要想随意调整xib中view的尺寸,首先要设置size为Freeform

三、Xib和storyboard对比

•共同点:

Ø都用来描述软件界面

Ø都用Interface Builder工具来编辑

•不同点

ØXib是轻量级的,用来描述局部的UI界面

ØStoryboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系

四、view的封装

•如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心

•外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据

•使用xib封装一个自定义view的步骤

1> 新建一个继承UIView的自定义view,假设类名叫做(JHAppView)

2> 新建一个MJAppView.xib文件来描述JHAppView内部的结构

3> 修改UIView的类型为JHAppView真是类型

4> 将内部的子控件跟JHAppView进行属性连线

5> JHAppView提供一个模型属性

6> 重写模型属性的set方法,因为在set方法中可以拿到外界传递的模型数据

7> 把模型数据拆开,分别设置数据到对应的子控件中

8> 补充:提供一个创建JHAppView的类方法,将读取xib文件的代码屏蔽起来

•使用代码一个自定义view的步骤

比上面多了一个步骤就是重写

- (id)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

//在这里面添加子空间和一些自空间的一次性设置

}

return self;

}

时间: 2024-07-30 14:57:50

instancetype,xib文件的使用的相关文章

iOS UI-团购案例(通过xib文件自定义UITableViewCell)

一.Model 1 #import <Foundation/Foundation.h> 2 3 @interface Goods : NSObject 4 5 @property (nonatomic, copy) NSString *icon; 6 @property (nonatomic, copy) NSString *title; 7 @property (nonatomic, copy) NSString *price; 8 @property (nonatomic, copy) N

IOS中使用.xib文件封装一个自定义View

1.新建一个继承UIView的自定义view,假设类名叫做 MyAppVew #import <UIKit/UIKit.h> @class MyApp; @interface MyAppView : UIView @property(strong,nonatomic) MyApp*app; +(instancetype)appView; @end MyAppView.h #import "MyAppView.h" #import "MyApp.h" @i

加载带有手势识别器的XIB文件时的注意事项

首先新建一个继承自UIView的类,并创建相应的XIB文件 #import <UIKit/UIKit.h> @interface ZHDemoView : UIView + (instancetype)demoView; @end 提供一个类方法以供快速创建当前类 在.m中实现类方法,通常从XIB中加载出来的是一个数组,所以用到了lastObject方法 + (instancetype)demoView { NSArray *nibArray = [[NSBundle mainBundle]

**IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)

使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib文件是什么? A nib file describes the visual elements of your application’s user interface, including windows, views, controls, and many others. It can also

xib文件的使用

作用:xib文件可以用来描述某一块局部的UI界面 xib加载 1> NSBundle *bundel = [[NSBundle mainBundle] loadNibName:@"xxx.xib" owner:nil options:nil]; 这个方法会创建xib中所有对象,并且将对象按顺序方法objs数组中 2> bundle 参数可以为nil,默认就是main bundle UINib *nib = [[UINib nibWithNibName:@"xxx.

将插座变量(IBOutlet)关联到*.xib文件中对象 + 将对*.xib对象的操作关联到动作方法(IBAction)

将插座变量(IBOutlet)关联到*.xib文件中对象 以BNRDetailViewController.m和BNRDetailViewController.xib为例(<iOS编程>第10章例子) 1.打开BNRDetailViewController.xib,添加一个UITextField对象: 2.在辅助编辑器中打开BNRDetailViewController.m,方法是:按住Option键并点击项目导航面板中的BNRDetailViewController.m: 3.按住Contr

[转]iOS学习笔记(2)--Xcode6.1创建仅xib文件无storyboard的hello world应用

转载地址:http://www.mamicode.com/info-detail-514151.html 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理很重要,所以,需要创建一个没有storyboard的项目 1. 创建一个新的工程 2. 选择仅一个视图的模板 选择 Single View Application , 点击Next 3. 填写项目信息 不需要选择core data,填好信息后,点击next,然后点击create 4. 删除sto

加载xib文件

说明 .xib文件在经过编译器编译之后会变成.nib文件 方法1 NSArray *array=[[NSBundle mainBundle]loadNibNamed:@"ShopView" owner:nil options:nil]; [self.view addSubview:[array firstObject]]; 此时ShopView.xib编译后变成ShopView.nib文件 并且返回的是一个数组,按添加顺序排序 方法2 UINib *nib=[UINib nibWith

iOS边练边学--xib文件初使用

一.Xib和storyboard对比 *共同点: 1>都用来描述软件界面 2>都用Interface Builder工具来编辑 3>本质都是转换成代码去创建控件 *不同点 1>Xib是轻量级的,用来描述局部的UI界面 2>storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系 二.Xib的加载方法 方法1: NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名