【iOS】Xib的使用與File'Owner總結

一、XIB的適用範圍

xib(也叫Nib)與storyboard一樣是用來描述界面的。

storyboard描述的是比較大型的,大範圍.適合描述界面跳轉等.

二、XIB的使用

Xib是小範圍的的,是輕量級的.比較適合描述小塊的界面.

創建xib
新建界面裏面user interface --》empty.

加載xib
[NSBundle mainBudle]loadNibNamed:XXX….]來加載xib

三、關於loadNibNameed方法


[[NSBundle mainBundle] loadNibNamed:@"MyXIB" owner:nil options:nil];  //一般用法

返回值:返回的NSArray是根視圖下的視圖個數(不包括子視圖),如下圖:只返回2個,即View與Button。(不包括View中的子視圖)

owner:指定相應的File's Owner



xib適用例子:
//
//  XNViewController.m
//  09xib的使用, 只是簡單的加載xib, 沒有設置filesowner不能進行連線.
//
//  Created by neng on 14-6-5.
//  Copyright (c) 2014年 neng. All rights reserved.
//

#import "XNViewController.h"

@interface XNViewController ()
{
    BOOL _sign;//測試玩
}
@end

@implementation XNViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    _sign = NO;
    [self myLoadXib];
}

/**加載xib*/
-(void)myLoadXib
{
    //1.加載xib
    NSArray *views =  [[NSBundle mainBundle] loadNibNamed:@"MyXIB" owner:nil options:nil];
    //2.取出xib中的view並添加到父視圖
    UIView *myView = views[0];
    UIButton *btn1 = (UIButton *)[myView viewWithTag:1];
    UIButton *btn2 = (UIButton *)[myView viewWithTag:4];
    
    [btn1 addTarget:self action:@selector(myClick) forControlEvents:UIControlEventTouchUpInside];
    [btn2 addTarget:self action:@selector(myClick) forControlEvents:UIControlEventTouchUpInside];
    
    [self.view addSubview:myView];
    
    //NSLog(@"%d",views.count);  //返回的數組是視圖的個數(不包括子視圖)
    
    //另取一個.(數組中的順序是根據xib文件中的的順序來的)
    UIButton *btn = views[1];
    btn.frame = CGRectMake(0, 333, btn.frame.size.width, btn.frame.size.height);
    [btn addTarget:self action:@selector(myClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view  addSubview:btn];
}

/**xib中的監聽按鈕點擊事件, 點擊後使storyboard中label文字改變*/
-(void)myClick
{
    _sign = !_sign;
    if (_sign) {
        _myLabel.text = @"Hello!";
    }else{
        _myLabel.text = @"World!";
    }
}

@end

4.關於File’s Owner

作用xib也能像storyboard一樣連線. (storyboard默認生成的時候,class爲對應的viewController,因此能直接和代碼中方法進行連線)。

做法:
(1)
.xib中的class設置爲對應的viewController.
(2)
. 並在loadNib時將owner設置爲對應的viewController(即一般爲self, 對象)。

File’Owner不限於viewController,可以是任何類.
Class
定義爲哪個類,就能在哪個類中進行連線, 而要在loadNibowner傳入相應的對象即可調用相應方法。(必須保持一致,否則調用方法時會出現找不到方法)


轉載請註明出處:http://blog.csdn.net/xn4545945 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章