美文网首页
Xib的使用

Xib的使用

作者: coderhlt | 来源:发表于2018-03-25 16:09 被阅读22次

一、加载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
  1. 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
  1. 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.

相关文章

网友评论

      本文标题:Xib的使用

      本文链接:https://www.haomeiwen.com/subject/syghcftx.html