iOS 使用nib文件(二)

接着 iOS 使用nib文件(一)来。

在TestNibView.m中有个方法

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

这个方法来自NSCoding协议。NSCoding协议如下,就两个方法。

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder; // NS_DESIGNATED_INITIALIZER

@end

nib文件能够保存和恢复对象就需要用到这两个方法。我们在需要归档自己自定义的对象时,也会实现这两个方法。 对于UIView(包括子类)和UIViewController(包括子类)系统都已经实现了这两个方法。使用xib文件实例化对象时,首先

- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary
*)options;

会被调用,接着,系统就会调用initWithCoder来实例化实现了NSCoding协议的对象,而没有实现NSCoding协议的对象,会调用其init方法。按照文档描述,initWithCoder只是loadNibNamed方法中的一部分。

iOS 使用nib文件(一)中说道TestNibView中的一个方法

+(instancetype)testNibView
{
    return [[[NSBundle mainBundle]loadNibNamed:@"TestNibView" owner:self options:nil] firstObject];
}  

这种使用了单独的xib文件的view只能通过代码去使用,而没有办法在其他的xib中使用。假设在A.xib中,我们拖拽了一个UIView叫做View,将其class设置为TestNibView,这个时候,和TestNibView类关联的xib就不是TestNibView.xib,而是View,我们可以在View上加一个按钮,这个按钮可以作为outlet和TestNibView的button关联起来。

需要注意的是initWithCoder方法只是一个init方法,它只是确保init,至于outlet这些关联在这个方法并没有完成关系,这一步,打印self.button是nil。loadNibNamed还会在initWithCoder之后调用awakeFromNib。而到了awakeFromNib方法中,这些outlets、delegate才确保已全部关联,这个方法中[super awakeFromNib]后打印self.button不为空。一般来说,我们并不需要在awakeFromNib中做些什么,除了那些没有办法在xib中设置的东西,重载记得调用[super
awakeFromNib]。

版权声明:欢迎评论和转载,但请保留出处!

时间: 2024-08-23 16:20:34

iOS 使用nib文件(二)的相关文章

iOS 使用nib文件(一)

首先是加载nib文件的方法: - (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options; Return Value An array containing the top-level objects in the nib file. The array does not contain references to the File's Owner or any proxy

IOS面试题(二)

50. 谈谈对Block 的理解?并写出一个使用Block执行UIVew动画? 答:Block是可以获取其他函数局部变量的匿名函数,其不但方便开发,并且可以大幅提高应用的执行效率(多核心CPU可直接处理Block指令) 1 2 3 4 5 [UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ [[blueViewCont

从零开始学ios开发(十二):Table Views(中)UITableViewCell定制

我们继续学习Table View的内容,这次主要是针对UITableViewCell,在前一篇的例子中我们已经使用过UITableViewCell,一个默认的UITableViewCell包含imageView.textLabel.detailTextLabel等属性,但是很多时候这些默认的属性并不能满足需要,其实更多的时候我们想自己制定UITableViewCell的内容,这篇学习的就是制定自己的UITableViewCell. UITableViewCell继承自UIView,因此它可以加载

从零开始学ios开发(十二):Table Views(上)

这次学习的控件非常重要且非常强大,是ios应用中使用率非常高的一个控件,可以说几乎每个app都会使用到它,它就是功能异常强大的Table Views.可以打开你的iphone中的phone.Messages.Contacts.Mail.Settings等等等等,这些都用到了Table Views. 在Table Views中,Table是用来显示一系列数据的,每条数据占用且只占用一行(一个table cell),在ios中没有规定table到底可以容纳多少行数据,也就是说,只要内存足够多,tab

iOS开发-定制多样式二维码

iOS开发-定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常见的二维码功能包括信息获取.网站跳转.电商交易.手机支付等等,其拥有密度小.信息容量大.容错能力强.成本低.制作难度低等优点.在移动开发中,二维码的地位也越来越重要,掌握二维码的基本操作是重要的本领之一. 在iOS7之后,苹果自身集成了二维码的生成和读取功能.生成二维码包括以下步骤 1.导入CoreIm

iOS数据持久化之二——归档与设计可存储化的数据模型基类

iOS数据持久化之二--归档与设计可存储化的数据模型基类 一.引言 在上一篇博客中,我们介绍了用plist文件进行数据持久化的方法.虽然简单易用,但随着开发的深入,你会发现,这种方式还是有很大的局限性.试想,如果我们可以将用户的登录返回信息模型,游戏中角色的属性信息模型进行直接的持久化存取,那是不是非常爽的事,幸运的是,我们可以通过归档,来设计一个这样的数据模型. 二.先来精通归档吧 归档也是iOS提供给开发者的一种数据存储的方式,事实上,几乎所有的数据类型都可以通过归档来进行存取.其存储与读取

iOS开发中文件的上传和下载功能的基本实现-备用

感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: 复制代码代码如下: YYViewController.m#import "YYViewController.h" #define YYEnc

斯坦福 IOS讲义 课件总结 二

1,OC里面传参数个数不同,可以是两个完全不同的方法.如 - (void)addCard:(Card *)card atTop:(BOOL)atTop; - (void)addCard:(Card *)card; 第二个方法可以这样实现 - (void)addCard:(Card *)card{ [self addCard:card atTop:NO];} 2,由于要延用card里面的方法,所以这三个方法要写在.h文件里. - (void)addCard:(Card *)card atTop:(

iOS安全攻防(二十三):Objective-C代码混淆

iOS安全攻防(二十三):Objective-C代码混淆 class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄. 所以,我们迫切的希望混淆自己的代码. 混淆的常规思路 混淆分许多思路,比如: 1)花代码花指令,即随意往程序中加入迷惑人的代码指令 2)易读字符替换 等等 防止class-dump出可读信息的有效办法是易读字符替换. Objective-C的方法名混淆 混淆的时机 我们希望在开发时一直保留清晰可读的程序代