美文网首页
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