Menu

在有些情况下有利于加快项目功能的实现

0.前言                                 

iOS-xib的使用1,iOS-xib使用1

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

1.

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

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

 

2.

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

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

 

  1. 如果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对象)中能找到相应的方法去调用。

 

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

     
图片 1


  1. File‘s owner使用步骤:

    
图片 2

 图片 3

     注:  类型匹配就是说: 在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:

        
图片 4        
    

 

控制器中的用法:

  • (void)viewDidLoad
    {
          [super viewDidLoad];
      
          RowView *row = [RowView rowViewWithIcon:@”017.png”
    name:@“jake”];
          [self.view addSubview:row];
    }

一、Files
owner的解析过程和使用: 1. storyboard:描述软件界面;iOS5.0后出来的。
xib:描述软件界面;是storyboard前…

 

 

 

在项目开发中,我们经常会碰到,某些视图View
内部基本空间都一样,只是数据不同,这时,我们可以用xib来将这个视图封装起来多次重用,

 

(例如,大小固定 控件固定的TableViewCell)

 

这可以尽可能的加快我们的项目开发进度。

 

 

 

1.介绍一下xib的基本使用                        

 

A. xib中的File’s
owner是告诉xib中的控件可以跟ViewController这个类的属性和方法连线。虽然可以跟这个ViewController类里的方法和属性连线,但是不代表能直接调用这里边的方法。必须还要进行一步操作.

 

 

 

B. 加载xib时,需要传入一个owner对象,就能调用这个对象里的方法.

 

 

 

如果不传入own会报野指针错误。

 

 

 

 

 

设计xib,最好不要绑定File’s
owner,尽量让代码耦合性弱,即相互关联不紧密。

 

 

 

  1. xib的重用                              

 

2.1.新建一个xib                                        

 

 

 

 

 

 

 

2.2.新建一个RowView类封装xib的属性                             

 

rowView.h

 

复制代码

1 #import <UIKit/UIKit.h>

3 @interface RowView : UIView

4 + (id)rowViewWithIcon:(NSString *)icon name:(NSString *)name;

7 @property (nonatomic, weak) IBOutlet UIButton *iconBtn;

9 @property (nonatomic, weak) IBOutlet UILabel *nameLabel;

复制代码

 

 

rowView.m

 

复制代码

 1 #import “RowView.h”

 2 

 3 @implementation RowView

 4 

 5 + (id)rowViewWithIcon:(NSString *)icon name:(NSString *)name

 6 {

 7     RowView *view = [[NSBundle mainBundle]
loadNibNamed:@”RowView” owner:nil options:nil][0];

 8     

 9     // 1.设置图标

10 //    UIButton *iconBtn = (UIButton *)[view viewWithTag:1];

11     [view.iconBtn setImage:[UIImage imageNamed:icon]
forState:UIControlStateNormal];

12     

13     // 2.设置姓名

14 //    UILabel *nameLabel = (UILabel *)[view viewWithTag:2];

15     view.nameLabel.text = name;

16     

17     return view;

18 }

复制代码

 

 

2.3.在控制器ViewController类里调用类生成xib重用                      

 

复制代码

#import “ViewController.h”

#import “RowView.h”

 

@interface ViewController ()

 

@end

 

@implementation ViewController

 

– (void)viewDidLoad

{

    [super viewDidLoad];

    

    RowView *row = [RowView rowViewWithIcon:@”017.png”
name:@”哈哈哈”];

    

    [self.view addSubview:row];

}

复制代码

只需要传参数进去,即可生成各种数据不同的xib

在项目开发中,我们经常会碰到,某些视图View
内部基本空间都一样,只是数据不同,这时,我们可以用xib来将这个视图封装起来多次…

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图