Xib的使用与File'Owner总结

Xib的使用与File'Owner总结

一、XIB的适用范围

xib(也叫Nib)与storyboard一样是用来描述界面的。

storyboard描述的是比较大型的,大范围.适合描述界面跳转等.

二、XIB的使用

Xib是小范围的的,是轻量级的.比较适合描述小块的界面.

创建xib:新建界面里面user interface --》empty.

加载xib:[NSBundle mainBudle]loadNibNamed:XXX….]来加载xib

三、关于loadNibNamed方法

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

返回值:返回的NSArray是根视图下的视图个数(不包括子视图),如下图:只返回2个,即View与Button。(不包括View中的子视图)

Xib的使用与File'Owner总结

xib适用例子:
  1. //  XNViewController.m  
  2. //  09xib的使用, 只是简单的加载xib, 没有设置filesowner不能进行连线.  
  3. //    
  4. #import "XNViewController.h"  
  5.   
  6. @interface XNViewController ()  
  7. {  
  8.     BOOL _sign;//测试玩  
  9. }  
  10. @end  
  11.   
  12. @implementation XNViewController  
  13.   
  14. - (void)viewDidLoad  
  15. {  
  16.     [super viewDidLoad];  
  17.       
  18.     _sign = NO;  
  19.     [self myLoadXib];  
  20. }  
  21.   
  22. /**加载xib*/  
  23. -(void)myLoadXib  
  24. {  
  25.     //1.加载xib  
  26.     NSArray *views =  [[NSBundle mainBundle] loadNibNamed:@"MyXIB" owner:nil options:nil];  
  27.     //2.取出xib中的view并添加到父视图  
  28.     UIView *myView = views[0];  
  29.     UIButton *btn1 = (UIButton *)[myView viewWithTag:1];  
  30.     UIButton *btn2 = (UIButton *)[myView viewWithTag:4];  
  31.       
  32.     [btn1 addTarget:self action:@selector(myClick) forControlEvents:UIControlEventTouchUpInside];  
  33.     [btn2 addTarget:self action:@selector(myClick) forControlEvents:UIControlEventTouchUpInside];  
  34.       
  35.     [self.view addSubview:myView];  
  36.       
  37.     //NSLog(@"%d",views.count);  //返回的数组是视图的个数(不包括子视图)  
  38.       
  39.     //另取一个.(数组中的顺序是根据xib文件中的的顺序来的)  
  40.     UIButton *btn = views[1];  
  41.     btn.frame = CGRectMake(0, 333, btn.frame.size.width, btn.frame.size.height);  
  42.     [btn addTarget:self action:@selector(myClick) forControlEvents:UIControlEventTouchUpInside];  
  43.     [self.view  addSubview:btn];  
  44. }  
  45.   
  46. /**xib中的监听按钮点击事件, 点击后使storyboard中label文字改变*/  
  47. -(void)myClick  
  48. {  
  49.     _sign = !_sign;  
  50.     if (_sign) {  
  51.         _myLabel.text = @"Hello!";  
  52.     }else{  
  53.         _myLabel.text = @"World!";  
  54.     }  
  55. }  
  56.   
  57. @end  

4.关于File’s Owner

作用: 让xib也能像storyboard一样连线. (storyboard默认生成的时候,class为对应的viewController,因此能直接和代码中方法进行连线)。

做法:
(1). 将xib中的class设置为对应的xxxViewController.
(2). 并在loadNib时将owner设置为对应的xxxViewController(即一般为self, 对象)。

注意:
Xib文件的File’Owner不限于ViewController类,可以是任何类. Class定义为哪个类, 就能在哪个类中进行连线, 而要在loadNib时owner传入相应的对象(self对象)即可调用相应方法。(必须保持一致,否则调用方法时会出现找不到方法)。
 
另外:
也可以对Xib中某个UI控件单独设置Class,以后该控件及其子控件就需要在设置的Class中拖线引用。此时Xib功能类似Storyboard,针对已指定Class的Xib内的UI控件,千万不能再向Xib 的File's Owner拖线了,否则必定报错。
 


转载出处:http://blog.csdn.net/xn4545945