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 objects; it contains only those objects that were instantiated when the nib file was unarchived. You should retain either the returned
array or the objects it contains manually to prevent the nib file objects from being released prematurely.

Discussion

You can use this method to load user interfaces and make the objects available to your code. During the loading process, this method unarchives each object, initializes it, sets its properties to their configured values, and reestablishes any connections to
other objects. (To establish outlet connections, this method uses the setValue:forKey: method,
which may cause the object in the outlet to be retained automatically.) For detailed information about the nib-loading process, see Resource
Programming Guide
.

该方法的返回值是一个数组,数组不包含对File‘s Owner或者任何代理对象的引用,仅仅包含了nib文件在unarchived时被初始化的对象。你应该retain这个数组或者数组中对象以避免对象被提前释放。

你可以使用该方法来加载UI,并使UI中包含的对象在你的代码中是可用的。在加载过程中,该方法unarchived每一个对象,初始化、设置属性被计算出来的值,同时重新建立和其他对象建立的connections。为了建立outlet
connections,该方法使用了setValue:forKey:,可能会导致对象被自动retain.

nib文件就是存储了归档对象数据的文件,通过对该类型文件进行解档,我们可以恢复被归档的对象。

#import <UIKit/UIKit.h>

@interface TestNibView : UIView

@property (weak, nonatomic) IBOutlet UIButton *button;
+(instancetype)testNibView;

@end
#import "TestNibView.h"

@implementation TestNibView

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

-(instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {

    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self)
    {
        DLog(@"%@",self.button);
    }
    return self;
}

-(void)awakeFromNib
{
    [super awakeFromNib];
    DLog(@"%@",self.button);
}

@end
<span style="font-family: Menlo; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Menlo; background-color: rgb(255, 255, 255);"></span><pre name="code" class="objc" style="color: rgb(209, 47, 27);">+(instancetype)testNibView;//只能使用代码创建

<span style="font-family: Menlo; background-color: rgb(255, 255, 255);">通过代码创建TestNibView对象的方法,该方法使用一个名为TestNibView.xib的文件。</span>

TestNibView.xib的内容如下图:

上面这种方法在我们使用xib自定义cell,为cell关联自定类时最长用。

对于UITableViewCell,

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self)
    {
        self = [[[NSBundle mainBundle]loadNibNamed:@"CellPractice" owner:self options:nil] firstObject];
    }
    return self;
}

对于UICollectionViewCell,

//注册[cell class]后,dequeueReusableCellWithReuseIdentifier会调用该方法,

-(instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        NSArray * arrayOfView = [[NSBundle mainBundle] loadNibNamed:@"CellForAnswerCard" owner:self options:nil];
        if (arrayOfView.count < 1)
        {
            DLog(@"CellForAnswerCard.xib 不存在");
            return nil;
        }
        if ([[arrayOfView objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]] == false)
        {
            return nil;
        }
        self = [arrayOfView firstObject];
    }
    return self;
}

- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options;中options参数在文档中也有说明,只是很少用到。

在TestNibView.m中还有几个方法,是下次要研究的内容。

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

时间: 2024-10-12 02:55:04

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

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 @

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

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

iOS之nib、xib及storyboard的区别

我们经常可以听到nib开发或xib开发之类的术语,但两者有什么区别呢?其实两者说的意思差不多. nib是3.0版本以前的产物,在终端下我们可以看到,NIB其实是一个文件夹,里面有可执行的二进制文件: xib是一个基于xml的描述文件,可以实现可视化编程. 无论nib也好,xib也好,最终在执行UIViewController生命周期函数loadView之前,都会转化成可执行的nib文件. storyboard是多个xib文件集合的描述文件,也采用xml格式. 那么storyboard与xib比较

加载nib文件的过程

当加载nib文件时,存储在nib文件中的任何对象都会被重新创建.这意味着会在后台执行alloc和init方法.所以,当应用程序启动时,会分配并初始化一个AppController实例.在执行init方法期间,所有IBOutlet实例变量都为nil.只有创建了nib文件中的所有对象,所有连接才算完成. 一旦建立了所有连接,会向创建的每个对象发送消息awakeFromNib.一个非常常见的错误是试图在init方法中使用IBoutlet执行一些操作.由于所有实例变量都为nil,发送给他们的所有消息不执

IOS开发之文件上传

IOS开发之文件上传 在移动应用开发  文件形式上传是必不可少的,最近把IOS这块文件上传文件代码简单的整理一下,如果大家有需要安卓这边的代码,本人也可以分享给大家!QQ群:74432915  欢迎大家一起探讨 首先本demo采用网上开源框架 AFNetworking  源码:http://download.csdn.net/detail/wangliang198901/7809439 将整个框架导入IOS新建立的工程中 在FKAppDelegate.h声明 如下: #import <UIKit

iOS之nib、xib及storyboard的区别及storyboard的加载过程

先讲述下nib, nib是3.0版本以前的产物,在终端下我们可以看到,NIB其实是一个文件夹,里面有可执行的二进制文件: 区分xib和storyboard的区别? 不同点: 1> 无论nib也好,xib也好,最终在执行UIViewController生命周期函数loadView之前,都会转化成可执行的nib文件. 2> storyboard是多个xib文件集合的描述文件,一个xib文件对应着一个视图控制器和多个视图. toryboard时,一个工程只需要一个主storyboard文件就可以.

iOS中对文件的操作

转自:http://marshal.easymorse.com/archives/3340 iOS中对文件的操作 因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除 Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除 在Do

iOS 读写xml文件

//*********写入文件,传入要保存的信息*********//保存xml -(void) saveXml:(NSString *)data { //创建文件管理器 NSFileManager *fileManager = [NSFileManager defaultManager ]; //获取路径 //参数NSDocumentDirectory要获取那种路径 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentD

IOS读写Plist文件最简单方法

在网上搜了一圈,发现好多代码 = =小白不想看那么多啊,然后就琢磨了下,原来这么easy ! 1 // 获取PLIST路径 2 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"]; 3 // 获取PLIST数据 4 NSMutableDictionary *data = [[NSMutableDictionary alloc] initWith