iOS-xib的使用1

一、File‘s owner的解析过程和使用:

1.

  storyboard:描述软件界面;iOS5.0后出来的。

  xib:描述软件界面;是storyboard前身。

 

2.

  项目环境里面的所有资源都要通过 [NSBundle mainBundle]来访问, 比如访问图片的全路径;

  ====有一个方法:loadNibNamed:(NSString*) owner:(id) option:(NSDictionary*) ===

 

3. 如果xib中的某一个控件想和控制器进行连线的话:

  1> xib的file‘s owner必须要设置class为相应的控制器;

  2> loadNibNamed:(NSString*) owner:(id) option:(NSDictionary*)中的owner要设置成相应的控制器(因为这个参数不传的话,运行的时候file‘s owner还是为空);

  3> xib设置file‘s owner的class,到时候xib里面的控件才可以在file’s owner(类或对象,比如Dog对象)中能找到相应的方法去调用。

 

4. xib的本质就是xml,解析示意过程如下:

     

------------------------------------------------------------------------------------------------------------------------------------

5. File‘s owner使用步骤:

    

 

     注:  类型匹配就是说: 在File‘s owner的class中设置的类型要和loadNibNamed:(NSString*) owner option:(NSDictionary*)中的owner参数的类型要一致。

 

二、view的封装 (自定义view)    

前言:不应该用控制器来监听xib中按钮的点击,因为xib和控制器绑定死了,耦合性太强,不利于扩展重用。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

为方便查看,简单描述一下通过xib自定义view的概况:

 

=======RowView.m 和 RowView.h 文件内容 以及xib文件======

#import "RowView.h"
@implementation RowView
+ (id)rowViewWithIcon:(NSString *)icon name:(NSString *)name
{
    RowView *view = [[NSBundle mainBundle] loadNibNamed:@"RowView" owner:nil options:nil][0];   

#if 1 // 通过tag来拿出xib中的控件

    // 1.设置图标
    UIButton *iconBtn = (UIButton *)[view viewWithTag:1];
    [view.iconBtn setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal]; 
// 注:类方法不能访问成员变量!
所以不能用 _iconBtn
    
    // 2.设置姓名
    UILabel *nameLabel = (UILabel *)[view viewWithTag:2];
    view.nameLabel.text = name;

#else   // 拖线连接属性和xib
    // 1.设置图标
    //  UIButton *iconBtn = (UIButton *)[view viewWithTag:1];
    [view.iconBtn setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];
    
    // 2.设置姓名
    //  UILabel *nameLabel = (UILabel *)[view viewWithTag:2];
    view.nameLabel.text = name;
#endif


    return view;
}
@end

 ----------------------------------------

#import <UIKit/UIKit.h>
@interface RowView : UIView
+ (id)rowViewWithIcon:(NSString *)icon name:(NSString *)name;
@property (nonatomic, weak) IBOutlet UIButton *iconBtn;      // 不是拖线的话就不要了
@property (nonatomic, weak) IBOutlet UILabel *nameLabel;   // 不是拖线的话就不要了
@end

 

 ----------------------------------------

RowView.xib:

                      

 

控制器中的用法:
- (void)viewDidLoad
{
      [super viewDidLoad];
  
      RowView *row = [RowView rowViewWithIcon:@"017.png" name:@“jake"];
      [self.view addSubview:row];
}

posted @ 2015-12-23 22:05  nxz_diy  阅读(295)  评论(0编辑  收藏  举报