view.xib的说明
View的custom cass是关联自身的 File’s owner是关联任意类的

方式一.xib拖xib 用File’s owner
方式二.代码加载,不向某个控制器关联控件 用View的custom class

一.代码加载XIB


1).只有xib文件
1.只有View1.xib文件
2.File’s Owner 和View1的Custom class都未设置

加载View的方法

 UIView *v1 =  [[[NSBundle mainBundle]
loadNibNamed:@"View1" owner:nil options:nil] lastObject];

2).有xib****( .h 和.m )
****文件
1.有View11.xib View11.h View11.m文件
2.File’s Owner 和View1的Custom class都未设置

加载View的方法

UIView *v11 =  [[[NSBundle mainBundle]
loadNibNamed:@"View11" owner:nil options:nil] lastObject];

3).有xib文件,设置了File’s Owner
1.有View2.xib文件
2.A.File’s Owner 为ViewController (File’s Owner关联ViewController.xib,可以向 VIewController.h或ViewCOntroller.m拖线)
B. 或者设置为UIViewController

3.View2的Custom class未设置

A种情况 某个ViewController的View
ViewControler加载View方法

    UIView *v2 =  [[[NSBundle mainBundle]
loadNibNamed:@"View2" owner:self options:nil] lastObject];

B种情况 公共的
加载View方法

 UIView *v2 = [[UIViewController alloc] initWithNibName:
@"View2" bundle:nil].view;
  1. .有xib( .h 和.m ) 文件,设置了File’s Owner 和 View的Custom Class**

1.有View3.xib文件 View3.h View3.m
2.File’s Owner设置为 A.ViewContoller
或者 B.UIViewController)
3.View3的Custom class 设置为 VIew3 (xib可以向 View3.h或View3.m拖线)

A种情况 某个ViewController的View
ViewControler加载View方法

   UIView *v3 =  [[[NSBundle mainBundle] loadNibNamed:
@"View3" owner:self options:nil] lastObject];

B种情况 公共的 需要将view和File’s Owner连线
加载View方法

  UIView *v3 = [[UIViewController alloc] initWithNibName:
@"View3" bundle:nil].view;

注:
当新建AViewController类时默认生成
1.AViewController.h 和 AViewController.m文件
2.AViewController.xib
即可 [[AViewController alloc] initWithNibName:@"" bundle:nil]

5).有xib( .h 和.m ) 文件,设置了File’s Owner
1.有View3.xib文件 View3.h View3.m
2.File’s Owner(File’s Owner可以设置为A.ViewContoller 或者 B.UIViewController)

其他controller使用代码:[UINib nibWithNibName:@"CycleScrollView"bundle:nil]

XIB拖XIB


一 .通过父View的Custom Class (XIB拖XIB) 有缺陷,不用

ViewController
加载xib时候会触发一些方法,如:

- (id)initWithCoder:(NSCoder *)aDecoder
- (id)awakeAfterUsingCoder:(NSCoder*)aDecoder

可以在-awakeAfterUsingCoder:(NSCoder*)aDecoder里通过 nibName 获取xib实例并加以替换

1.新建CustomView.h
CustomView.m
CustomView.xib

2.设置
CustomView.xib里父View
的Custom Class为
CustomView 设置其他Xib或StoryBoard里
View的 Custom Class为CustomView

3.在 CustomView
.m 文件里附上代码
- (id) awakeAfterUsingCoder:(NSCoder)aDecoder {
BOOL theThingThatGotLoadedWasJustAPlaceholder = ([[self subviews] count] == 0);
if (theThingThatGotLoadedWasJustAPlaceholder) {
SubView
theRealThing = [[self class] loadFromNibNoOwner];

        // pass properties through [self copyUIPropertiesTo:theRealThing]; //auto layout self.translatesAutoresizingMaskIntoConstraints = NO; theRealThing.translatesAutoresizingMaskIntoConstraints = NO; return theRealThing; } return self;
} -(void) copyUIPropertiesTo:(UIView *)view
{ // reflection did not work to get those lists, so I hardcoded them // any suggestions are welcome here NSArray *properties = [NSArray arrayWithObjects: @"frame",@"bounds", @"center", @"transform", @"contentScaleFactor", @"multipleTouchEnabled", @"exclusiveTouch", @"autoresizesSubviews", @"autoresizingMask", @"clipsToBounds", @"backgroundColor", @"alpha", @"opaque", @"clearsContextBeforeDrawing", @"hidden", @"contentMode", @"contentStretch", nil]; // some getters have 'is' prefix NSArray *getters = [NSArray arrayWithObjects: @"frame", @"bounds", @"center", @"transform", @"contentScaleFactor", @"isMultipleTouchEnabled", @"isExclusiveTouch", @"autoresizesSubviews", @"autoresizingMask", @"clipsToBounds", @"backgroundColor", @"alpha", @"isOpaque", @"clearsContextBeforeDrawing", @"isHidden", @"contentMode", @"contentStretch", nil]; for (int i=0; i<[properties count]; i++) { NSString * propertyName = [properties objectAtIndex:i]; NSString * getter = [getters objectAtIndex:i]; SEL getPropertySelector = NSSelectorFromString(getter); NSString *setterSelectorName = [propertyName stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[propertyName substringToIndex:1] capitalizedString]]; setterSelectorName = [NSString stringWithFormat:@"set%@:", setterSelectorName]; SEL setPropertySelector = NSSelectorFromString(setterSelectorName); if ([self respondsToSelector:getPropertySelector] && [view respondsToSelector:setPropertySelector]) { NSObject * propertyValue = [self valueForKey:propertyName]; [view setValue:propertyValue forKey:propertyName]; } }
}

**二 .通过file’s owner的Custom Class (XIB拖XIB)
**
通过重载 initWithCoder方法来实现,因为通过 xib 来创建一个对象会调用到这个方法,所以我们需要在这个方法里做一些处理,把这个 CustomView的 xib中的内容加载进来,这时同样是需要通过代码来来加载

1.新建CustomView.h
CustomView.m
CustomView.xib

2.设置
CustomView.xib里file’s owner的Custom Class为 CustomView 设置其他Xib或StoryBoard里View的 Custom Class为CustomView
3.在 CustomView
.m 文件里附上代码
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder]) {
UIView *containerView = [[[UINib nibWithNibName:@"CustomView" bundle:nil] instantiateWithOwner:self options:nil] objectAtIndex:0];
CGRect newFrame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
containerView.frame = newFrame;
[self addSubview:containerView];
}
return self;
}

XIB总结(代码加载xib或xib拖xib)相关推荐

  1. swift 代码加载xib storyboard

    初学swift,代码加载xib storyboard -.加载xib override init(nibName nibNameOrNil: String?, bundle nibBundleOrNi ...

  2. xib文件的加载方法

    xib文件的加载方法 以UITableViewCell的cell为例 很多时候因为系统的cell无法满足我们的日常需求,我们都会自定义cell 因为cell的界面比较固定,所以通常都会选择用xib来描 ...

  3. 【转载】一行代码加载网络图片到ImageView——Android Picasso

    原文链接:一句代码加载网络图片到ImageView--Android Picasso  注意:此处使用下面代码需要先配置一下gradle,下载所需包. 具体操作如下图: compile 'com.sq ...

  4. windows10驱动 x64--- 3环代码加载驱动(二)

    windows10驱动 x64--- 3环代码加载驱动 一:了解驱动加载工具 二:应用层--3环代码示例 一:了解驱动加载工具 平时调试.sys 我们都是用的驱动加载工具:open(打开驱动文件) - ...

  5. HTML基础和JSP了解及JSP中代码加载顺序

    HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...

  6. Java基础:Java代码加载顺序

    Java代码加载顺序 代码块 类加载和初始化相关案例一 案例二 深度加载知识 静态变量 内部类中不能定义静态变量 代码块 项目 Value 作用 局部代码块 在main方法里面 给变量限定声明周期,局 ...

  7. 【项目技术点总结之一】vue集成d3.js利用svg加载图片实现缩放拖拽功能

    [项目技术点总结之一]vue集成d3.js利用svg加载图片实现缩放拖拽功能 前言 概述 技术介绍 实现过程 插件安装 引用组件 初始化组件 实现效果 简单理解 使用d3创建一个svg 在svg中提添 ...

  8. linux内核添加c代码,如何从C代码加载Linux内核模块?

    Ciro Santill.. 19 最小的可运行示例 使用这个简单的参数打印机模块在QEMU + Buildroot VM和Ubuntu 16.04主机上进行了测试. 我们使用init_module/ ...

  9. java代码加载_java类中代码加载顺序

    package org.senssic; /** * 一般顺序:静态块-->静态变量-->成员变量-->构造方法-->静态方法(或非静态方法,需要调用) * 1.静态代码块(只 ...

最新文章

  1. 阿里巴巴是如何招人的,如何招到合适的人?
  2. Android View绘制之旅
  3. android中extends 和implements的区别
  4. 微服务网关Gateway中Path路径过滤
  5. php搜索图片不显示不出来了,PHP CURL采集百度搜寻结果图片不显示问题的解决方法【第1/4页】...
  6. 在Maven+Spring项目中使用Node.js的Gulp进行前端自动化构建
  7. linux文件夹做链接,linux为什么不能给目录做硬链接
  8. 二分查找的变体 —— Fibnaccian Search
  9. tplink 服务器未响应,详解win10安装tplink网卡免驱版无法用关键操作方法
  10. java计算机毕业设计小区宠物管理系统源码+系统+数据库+lw文档
  11. 前端开发常用哪些工具软件?
  12. 复制粘贴到word文档中的表格超出页面该怎么办
  13. 介绍会议中控系统模块化构成及功能作用
  14. vb里的lbound和ubound的用法
  15. 从零学会Photoshop经典教程300集
  16. CAD显示全屏控件(网页版)
  17. python学习笔记--Dictionary
  18. cacti监控及配置
  19. sublime 选择包含指定字符的所有行,或筛选有用的行或删除干扰行,批量比CTRL+D好用,专治筛选数据日志有用数据(数据库日志文件快速处理 SQL日志快速处理筛选)
  20. 你知道 Compiler 与 Interpreter 的区别吗?

热门文章

  1. Java中 String s = new String(“hello“)和String s = “hello“的区别
  2. 【Oauth2】SpringBoot整合Oauth2实现认证授权
  3. devcpp如何调试
  4. 日志分析工具 LogParser 学习笔记
  5. php时间戳、日期datetime转换
  6. Benefits from music
  7. java中文数字与阿拉伯数字相互转换
  8. 银行数据仓库体系实践(8)--主数据模型设计
  9. 抓包工具——IE浏览器HttpWatch插件
  10. SPM 3D医学图像配准