iOS xib的使用详解

1.File’s Owner为nil

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

CGRect rect = demo1.frame;

rect.origin.y = 100;

demo1.frame = rect;

[self.view addSubview:demo1];

2.File’s Owner有值, File’s Owner可以是任何实例,不一定是控制器

  // 下面是demo2_class1.h, xib和demo2_class1连线产生的

  @property (weak, nonatomic) IBOutlet UIView *purpleView;

  @property (weak, nonatomic) IBOutlet UIView *blueView;

// 下面是mainViewController.m

  demo2_class1 *demo2 = [[demo2_class1 alloc]init];

NSLog(@"load前:demo2.purpleView.frame-------%@",NSStringFromCGRect(demo2.purpleView.frame));

NSLog(@"load前:demo2.blueView.frame-------%@",NSStringFromCGRect(demo2.blueView.frame));

// 此时self.view是没值的,也就是说往self.view上加东西,是不会有效果的

// [self.view addSubview:demo2.purpleView];

[[[NSBundle mainBundle] loadNibNamed:@"demo2" owner:demo2 options:nil] lastObject];

NSLog(@"load后:demo2.purpleView.frame-------%@",NSStringFromCGRect(demo2.purpleView.frame));

NSLog(@"load后:demo2.blueView.frame-------%@",NSStringFromCGRect(demo2.blueView.frame));

[self.view addSubview:demo2.purpleView];

说明:xib只有loadNib完之后,File’s Owner的IBOutlet才会自动初始化

3.  如果在<2>的代码的基础上,新建一个dog类,把Owner改成dog,其他都不改

  Dog *dog = [[Dog alloc]init];

[[[NSBundle mainBundle] loadNibNamed:@"demo2" owner:dog options:nil] lastObject];

运行程序,程序崩溃,崩溃原因如下,由此可见,在loadNibNamed时,会去找owner的IBOutlet,并对IBOutlet做setValue的操作

2015-02-03 14:49:17.285 xib开发[31342:60b] *** Terminating app due to uncaught exception ‘NSUnknownKeyException‘, reason: ‘[<Dog 0x8d4bc90> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key blueView.‘

4.如果在<2>的代码的基础上,给demo2_classs1这个类添加实例方法 - (IBAction)clickMe;并且在xib上添加个按钮,按钮和clickMe做连线

在模拟器上点击那个按钮,有打印.

5.xib里的view指定为自定义的类.  PS:File’s Owner不用去设

--------------------------------------------------分割线--------------------------------------------------

5.1 Demo3 class一般是自定义类,需要提供一个遍历构造方法,方便使用

+ (instancetype)initWithXib{

return [[[NSBundle mainBundle] loadNibNamed:@"demo3" owner:nil options:nil] lastObject];

}

5.2 补充:如果需要对xib里各个子控件做个性化的设置,可以在awakeFromNib做相应设置

- (void)awakeFromNib{

self.backgroundColor = [UIColor redColor];

}

5.3 在mainViewController.m里使用xib

demo3_class *demo3 = [demo3_class initWithXib];

CGRect rect = demo3.frame;

rect.origin.y = 200;

demo3.frame = rect;

[self.view addSubview:demo3];

6.xib的File’s Owner是UIViewController的子类,File’s Owner的view 就是xib的view

// 提供便捷方法

+ (instancetype)viewControllerFromXib{

return [[self alloc] initWithNibName:@"demo4" bundle:nil];

}

看看MainViewController怎么使用:

  // 稳妥的做法

  demo4_ViewController *demo4VC = [[demo4_ViewController alloc]initWithNibName:@"demo4" bundle:nil];

  // 或者用便捷方法,如果xib文件的名字和类名称一样,可以用便捷方法

  // demo4_ViewController *demo4VC = [demo4_ViewController demo4ViewController];

[self.view addSubview:demo4VC.view];

  // 父子控制器

  [self addChildViewController:demo4VC];

时间: 2024-10-16 18:05:37

iOS xib的使用详解的相关文章

ios新特征 ARC详解

IOS ARC 分类: IOS ARC2013-01-17 09:16 2069人阅读 评论(0) 收藏 举报 目录(?)[+] 关闭工程的ARC(Automatic Reference Counting) 顺带附上ARC教程 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论.请不要将本文的部分或全部内容用于商用,谢谢合作. 欢迎转载本文,但是转载请注明本文出处:http://www.onevcat.com/2012/06/arc-hand-by

iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController

1.RootView 跳到SecondView 首先我们需要新一个View.新建SecondView,按住Command键然后按N,弹出新建页面,我们新建SecondView 2.为Button 添加点击事件,实现跳转 在RootViewController.xib中和RootViewController.h文件建立连接 在RootViewController.m中实现代码,alloc一个SecondViewController,用pushViewController到navigationCon

[转]iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController

转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem是上篇,我们接着讲UINavigationController的重要作用,页面的管理和切换. 1.RootView 跳到SecondView 首先我们需要新一个View.新建SecondView,按住Command键然后按N,弹出新建页面,我们新建SecondView 2

[转]iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

转载地址:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控制器的流程.最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕:当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕.相应地,在

IOS 友盟使用详解

IOS 友盟使用详解 这篇博客将会详细介绍友盟的使用,希望对博友们有所帮助. 首先我们在浏览器上搜索友盟. 在这里我们选择官网这个,进去友盟官网后我们按照下图进行选择. 接下来选择如下图 Next 这样我们便进入到了帮助文档 如果还没有友盟账号那么我们就需要注册一下了(点击图片中的注册即可) 注册成功并且登陆后我们需要按照操作获取Appkey 操作如图 NEXT 成功获取Appkey(复制下来,接下来会用到) 返回帮助文档 接下来是下载(安装)SDK,我么可以按照图片中的两种方法操作. 我选择了

iOS定位服务编程详解

现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 iOS 不像Android系统在定位服务编程时,可以指定采用哪种途径进行定位.iOS的API把底层这些细节屏蔽掉了,开发人员和用户并不知道现在设备是采用 哪种方式进行定位的,iOS系统会根据设备的情况和周围的环境,采用一套最佳的解决方案.这个方案是这样的,如果能够接收GPS信息,那么设备优先采用 GP

iOS学习--UIScrollView 原理详解

iOS学习--UIScrollView 原理详解 http://blog.csdn.net/yanfangjin/article/details/7898189 ScrollView UIScrollView UIScrollView为了显示多于一个屏幕的内容或者超过你能放在内存中的内容. Scroll View为你处理缩小放大手势,UIScrollView实现了这些手势,并且替你处理对于它们的探测和回应.其中需要注意的子类是UITableView以及UITextView(用来显示大量的文字).

(转) IOS ASI http 框架详解

(转) IOS ASI http 框架详解 ASIHTTPRequest对CFNetwork API进行了封装,并且使用起来非常简单,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中.ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互. ASIHTTPRequest功能很强大,主要特色如下: l 通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作 l 下载的数据,可存储到内存中或直接存储到磁盘中 l 能上传

IOS—UITextFiled控件详解

IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)]; //设置边框样式,只有设置了才会显示边框样式 text.borderStyle = UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone, UITextBorderS