ios中xib的使用介绍
ios中Xib的使用
ios中xib的使用
Nib files are the quintessential(典型的) resource type used to create iOS and Mac apps. A nib file is a data archive that essentially contains a set of freeze-dried objects that you want to recreate
at runtime. Nib files are used most commonly to store preconfigured windows, views, and other visually oriented objects but they can also store nonvisual(不可见的) objects such as controllers.
You edit nib files in Xcode with Interface Builder, which provides a graphical editor for assembling your objects. When you subsequently load a nib file into your application, the nib-loading code instantiates
each object in the file and restores it to the state you specified in Interface Builder. Thus, what you see in Interface Builder is really what you get in your application at runtime.
也就是说,nib文件(就是xib文件)是描述应用外观的一个描述文档,这里面包含了用户界面和用户界面相关元素。这样的话,可以方便我们编写程序。
在xcode中,以“sourece code”方式打开xib文件,发现他是一份以xml编码的文件,也就是说xib文件的本质是一份xml的脚本,描述了程序员对文件中的view及其子类等的设置,通过这样的方式来连接xib和代码。如下图所示,左边为xib正常打开方式,右边是xib文件使用sourece code打开。
下面直接切入正题,介绍创建一个xib方法:
A:介绍最基本的xib文件的创建和使用
一:单个view的提取和使用
1.创建一个xib文件,然后设置这个xib文件中的属性,设置如下:
a:file’s owner的类不需要设置,默认为nsobject类
b:在xib中添加一个view1,然后设置view的属性如下:
(这样,我们就可以改变view的大小了)
c:改变view的颜色。(方便我们观察)
2.在需要使用view1的类文件中添加下面的代码:
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"testXib" owner:nil options:nil];
UIView *view = [array firstObject];
[self.view addSubview:view];
知识点:
1.通过[[NSBundle mainBundle] loadNibNamed: owner: options:];方法来获取了xib中的属性。
2.通过[array firstObject]方法,提取出这个数组中的实例对象
效果图:
二:在xib中创建两个view
1.通过和上面相同的方法来为一个xib中创建两个view1和view2.
2.需要在使用view1和view2的类文件中添加下面的代码:
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"testXib" owner:nil options:nil];
UIView *view1 = [array firstObject];
UIView *view2 = [array objectAtIndex:1];
[self.view addSubview:view1];
[self.view addSubview:view2];
知识点:
1.xib文件中,我们可以设置多个view。
2.xib文件其实就是一个自定义view的工具,我们可以在xib中定义多个属性,然后再使用代码提取出这些属性。
3.代码中的array里面存放的其实就是xib文件中创建的所有的属性。
效果图:
B:view直接与xib进行关联
一:类中创建的view1属性与xib中的创建的view进行关联
注:用viewController类与xib进行关联
1.首先在ViewController类中创建熟悉:
#import "ViewController.h" @interface ViewController ()
@property (nonatomic, strong) IBOutlet UIView *view1;
@end
2.创建一个xib文件,把xib文件中的file owner的类改成ViewController:
3.在这个xib中创建一个UIView(与刚刚方法相同)
4.打开file owner中的关联属性栏,你会发现这边有一个view1(这个熟悉就是我们刚刚创建的属性),我们将view1和xib中的创建的view关联起来
5.在ViewController类中添加代码:
[[NSBundle mainBundle] loadNibNamed:@"testXib" owner:self options:nil];
[self.view addSubview:self.view1];
知识点:
1.将file owner的类变成ViewController这个类,就相当于说明了这个xib文件是属于ViewController类。
2.我们将view1和xib中创建的新的view关联起来就相当于将他们属性与属性描述链接起来,在代码运行中会自动对view1进行相应要求的创建。
3.要实现2中的效果,我们需要使用[[NSBundlemainBundle]
loadNibNamed:@"testXib"owner:selfoptions:nil];
方法,并将owner改为self。因为这个xib现在是属于viewControlelr这个类的。
效果图:
二:ViewController类中创建view1,view2,并于xib进行关联
1.在ViewController类中创建两个view:
#import "ViewController.h" @interface ViewController ()
@property (nonatomic, strong) IBOutlet UIView *view1;
@property (nonatomic, strong) IBOutlet UIView *view2;
@property (nonatomic, strong) IBOutlet UILabel *labletest; @end
2.在xib中将file owner的类改为viewController
3.在xib中创建两个view:
如图:
4.打开file owner中的关联属性界面,我们可以看到:
这边显示了我们刚刚在代码中创建的三个属性。我们将view1和view2关联起来。
5.在viewController中添加代码:
[[NSBundle mainBundle] loadNibNamed:@"testXib" owner:self options:nil];
[self.view addSubview:self.view1];
[self.view addSubview:self.view2];
知识点:
1.将xib的file owner改为ViewController。那么在xib中的属性关联界面中,会出现相关的属性。通过调整xib的file owner,就是说这里面存在一定的关联。
效果图:
补充:一个类可以关联多个xib文件。还有如果两个xib文件中都关联了这个类中的同一个view,那是不会报错。但是如果一开始先加载了一个xib文件,后来有加载了另一个xib文件,然后这两个xib中都关联了同一个view,那么关于这个view的设置会被覆盖掉。
C:创建一个XibManager的类,来管理xib文件。
1.首先创建一个NSObject的子类,名字为XibManager。然后在这个类中添加两个view1,view2.并在实现文件中重写init方法。
代码为:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h> @interface XibNamager : NSObject
@property (nonatomic ,strong) IBOutlet UIView *view1;
@property (nonatomic, strong) IBOutlet UIView *view2; @end #import "XibNamager.h" @implementation XibNamager -(id) init{
[[NSBundle mainBundle ] loadNibNamed:@"testXib" owner:self options:nil];
return self;
}
@end
2.创建一个xib文件,然后将file owner类改为XibManager类。
3.在xib中创建两个view,然后与XibManager关联起来。
图11
4.在viewController中导入XibManager类
5.在viewController中编写代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
XibNamager *manager = [[XibNamager alloc] init];
[self.view addSubview:manager.view1];
[self.view addSubview:manager.view2];
}
知识点:在这边创建了一个XibManager,其实就是使得代码更加简单,声明了一个类来统一管理xib中的view。
效果图为:
d:用在xib中创建一个button,然后实现button,将这个xib视图加载到主视图中。
一.使用UIView来写button的action方法
#import <UIKit/UIKit.h> @interface Xibview : UIView -(IBAction)buttonAction:(id)sender; @end #import "Xibview.h" @implementation Xibview -(IBAction)buttonAction:(id)sender{
NSLog(@"UIView中的button");
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"Xibview" owner:nil options:nil];
UIView *view2 = [array firstObject];
CGRect frame2 = [view2 frame];
frame2.origin.y = 100;
[view2 setFrame:frame2];
[self.view addSubview:view2];
}
效果图:
二.使用UIViewController来写button的action方法
#import <UIKit/UIKit.h> @interface xibViewController : UIViewController - (IBAction)buttonAction:(id)sender;
@end #import "xibViewController.h" @interface xibViewController () @end @implementation xibViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
} - (IBAction)buttonAction:(id)sender {
NSLog(@"点按方法");
}
@end
3.将xib中file owner的class改为xibViewController,然后将button和xibViewController中的方法关联起来。
@interface ViewController () @property(nonatomic,strong)xibViewController *controller; @end
下面是view的获取代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. self.controller = [[xibViewController alloc] initWithNibName:@"xibViewController" bundle:nil];
UIView *view1 = self.controller.view;
CGRect frame1 = [view1 frame];
frame1.origin.y = 20;
[view1 setFrame:frame1];
[self.view addSubview:self.controller.view]; }
效果图:
三.使用NSObject来写button的action方法
#import <UIKit/UIKit.h>这个类文件的地方,我们都可以编写可视化控件。然后我们也可以编写button的action方法。我们将xib中的文件编写在一个NSObject的子类里面,可以使得代码更加清晰,思路更加明了。
下面是操作方法:
1.创建一个xib,然后在这个xib中添加view1,在view1上添加button按钮
2.创建NSObject的子类xibFileManager,然后在文件中添加下面代码:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h> @interface xibFile : NSObject @property (nonatomic, strong) IBOutlet UIView *view1; -(IBAction)buttonAction:(UIButton*)button; @end #import "xibFile.h" @implementation xibFile -(id) init{
self = [super init];
[[NSBundle mainBundle] loadNibNamed:@"xibFile" owner:self options:nil];
return self;
} -(IBAction)buttonAction:(UIButton*)button{
NSLog(@"在file中创建了点击事件");
} @end
3.更改xib文件中的file owner的class名称为xibfile,并且关联相关属性和方法。
4.在viewcontroller中添加下面代码:
这边我们同样需要声明一个fileManager变量。防止arc提前释放fileManager导致view中button方法获取不到。
@interface ViewController ()
@property (nonatomic, strong) xibFile *fileManager;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.fileManager = [[xibFile alloc] init];
[self.view addSubview:self.fileManager.view1];
}
ios中xib的使用介绍的更多相关文章
- iOS中xib与storyboard原理,与Android界面布局的异同
用文本标记语言来进行布局,用的最多的应该是HTML语言.HTML能够理解为有一组特殊标记的XML语言. 一.iOS中xib与storyboard显示原理 在iOS中基本的布置界面的方式有3种:代码.x ...
- ios中xib文件的用法
ZQRView文件: // // ZQRView.h // // // Created by zzqqrr on 17/8/20. // // #import <UIKit/UIKit.h> ...
- iOS中 xib自定义View在storyboard中的使用
1,创建UIView 的SubClass 命名为MyView 2, new一个名为MyView的xib p1 3,配置xib的属性 p2 4,为View 添加背景色,添加一个按钮并定制按钮约束,这里我 ...
- ios中框架介绍
ios中框架介绍 参考博客: 参考文章:框架介绍 框架介绍 框架就是一个目录,一个目录包含了共享库,访问共享库里面的代码的头文件,和其他的图片和声音的资源文件.一个共享库定义的方法和函数可以被应用程序 ...
- iOS中多线程原理与runloop介绍
一.线程概述 有些程序是一条直线,起点到终点:有些程序是一个圆,不断循环,直到将它切断.直线的如简单的Hello World,运行打印完,它的生命周期便结束了,像昙花一现那样:圆如操作系统,一直运行直 ...
- IOS中获取各种文件的路径介绍及方法
IOS中获取各种文件的目录路径的方法 技术交流新QQ群:414971585 iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. docum ...
- Swift - iOS中各种视图控制器(View Controller)的介绍
在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来 ...
- [iOS] 使用xib作为应用程序入口 with IDE
[iOS] 使用xib作为应用程序入口 with IDE 在「使用xib做为应用程序入口 with Code」这篇文章中,介绍了如何透过写Code的方式,来使用xib做为应用程序的入口.但其实在Xco ...
- iOS 中的 HotFix 方案总结详解
相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...
随机推荐
- underscorejs-countBy学习
2.20 countBy 2.20.1 语法 _.countBy(list, iteratee, [context]) 2.20.2 说明 排序一个列表组成一个组,并且返回各组中的对象的数量的计数.类 ...
- sql server 数据分页显示。
select [ID] ,[StockApplyCode] ,[RcCode] ,[LabCenterCode] ,[LabGroupCode] ,[LabGroupName] ,[Barcode] ...
- python进度条代码
import sys import time def view_bar(num,total): rate = num / total rate_num = int(rate * 100) r = ' ...
- python 时间戳
import timeprint time.time()输出的结果是(单位:s):1395421406.39 x = time.localtime(x) x = time.strftime('%Y-% ...
- protocol(协议) 和 delegate(委托)也叫(代理)---辨析
protocol和delegate完全不是一回事. 协议(protocol),(名词)要求.就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现. 委托(delegate),(动 ...
- Python的subprocess模块
尝试在Python中运行可执行文件,网上给出的解决方案是: import os os.system("此处填程序路径") 我要运行的程序文件名中有空格,因此果断失败了,查看了一下帮 ...
- pecl安装php的ev扩展时的报错处理
pecl安装php的ev扩展,安装完毕后php.ini中加入扩展extension=ev.so,然后重启php-fpm出现以下报错 PHP Warning: PHP Startup: Unable ...
- PHP中的MVC
在PHP中使用MVC越来越流行了,特别是在一些开源的框架当中.MVC足以应对大多数的情况,但还有一些情况是其不太适合的,如比较简单的个人博客,对于只有几百篇文章量级的博客,使用MVC让人觉得有些太复杂 ...
- BZOJ 1257 余数之和
Description 给出正整数\(n\)和\(k\),计算\(j(n, k)=k\;mod\;1\;+\;k\;mod\;2\;+\;k\;mod\;3\;+\;-\;+\;k\;mod\;n\) ...
- About javascript language
Core http://www.cnblogs.com/leoo2sk/archive/2010/12/19/ecmascript-scope.html function(arguments) fun ...