一、加载Xib
屏幕快照 2018-03-25 下午2.58.55.png如图xib文件生成可执行文件是在资源包中是以.nib结尾的扩展文件。
屏幕快照 2018-03-25 下午3.05.01.png
又如图一个xib其实可以存放多个view,因此- (nullable NSArray *)loadNibNamed:(NSString *)name owner:(nullable id)owner options:(nullable NSDictionary *)options;加载xib的这个方法返回的就是一个数组。
NSArray *array= [[NSBundle mainBundle]loadNibNamed:@"test" owner:nil options:nil];
/*加载xib得到一个数组一般实际开发中,一个xib只存放一个view。view=array.firstObject或者view=array.lastObject都行
*/
UIView *view=array.firstObject;
//xib加载的view默认是有尺寸大小的
[self.view addSubview:view];
---------------------------------------------------------------------
方式二:
UINib *nib=[UINib nibWithNibName:@"test" bundle:nil];
NSArray *array=[nib instantiateWithOwner:nil options:nil];
UIView *view=array.lastObject;
[self.view addSubview:view];
二、xib自定义View
1.新建一个view类和一个xib
屏幕快照 2018-03-25 下午4.01.56.png
-
Testview.xib绑定Testview
屏幕快照 2018-03-25 下午4.02.59.png
#import <UIKit/UIKit.h>
@interface Testview : UIView
+(instancetype)testview;
@end
#import "Testview.h"
@implementation Testview
+(instancetype)testview{
return [[NSBundle mainBundle]loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil].firstObject;
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self=[super initWithCoder:aDecoder];
if (self) {
NSLog(@"正在初始化");
}
return self;
}
- (void)awakeFromNib{
[super awakeFromNib];
NSLog(@"初始化完毕");
}
@end
#import "ViewController.h"
#import "Testview.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Testview*view=[Testview testview];
view.frame=CGRectMake(100, 100, 100, 40);
[self.view addSubview:view];
}
@end
三、拖线
Testview.xib拖线到自定义view,拖线方式技巧和storyboard一样,略。。。。。。。。。。。。。
四、用xib来描述控制器的view
1.xib 绑定控制器
屏幕快照 2018-03-25 下午4.21.51.png
-
File's Owner连线xib的view
选中Files Owerner按着control向xib的view拖线
屏幕快照 2018-03-25 下午4.26.40.png
3.代码实现部分
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
ViewController *vc=[[ViewController alloc]initWithNibName:@"test" bundle:nil];
self.window.rootViewController=vc;
return YES;
}
init方法默认会调用initWithNibName, 先去加载有没有相同名称的xib,如果有,就去加载ViewController.xib;如果没有相同名称,还会去找相同名称,去掉Controller(View.xib)如果还没有,就不使用xib来描述控制器的view.去创建一个空白View.
-
利用系统自动完成几步(绑定、连线)
屏幕快照 2018-03-25 下午4.48.13.png
屏幕快照 2018-03-25 下午4.51.05.png
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
ViewController *vc=[[ViewController alloc]init];
self.window.rootViewController=vc;
return YES;
}
init方法默认会调用initWithNibName, 先去加载有没有相同名称的xib,如果有,就去加载ViewController.xib;如果没有相同名称,还会去找相同名称,去掉Controller(View.xib)如果还没有,就不使用xib来描述控制器的view.去创建一个空白View.
网友评论