【iOS7开发笔记】tableview之Xib文件的使用

1.storyboard 与 xib文件的区别

  • storyboard:描述软件界面,重量级,一般用来描述整个软件所有界面
  • Xib:描述软件界面,轻量级,一般用来描述局部。减少代码量。

2.使用xib

  • 创建一个xib文件

  • 读取xib
    • 除了图片以外的资源,一般都是用Bundle来读取
  • 解析xib
// 3.根据应用个数创建对应的框框(index 0 ~ 11)
    for (int index = 0; index<self.apps.count; index++) {
        // 3.1.创建view
        NSBundle *bundle = [NSBundle mainBundle];
        // 读取xib文件(会创建xib中的描述的所有对象,并且按顺序放到数组中返回)
        NSArray *objs = [bundle loadNibNamed:@"MJAppView" owner:nil options:nil];
        UIView *appView = [objs lastObject];
        
        // 3.2.添加view
        [self.view addSubview:appView];
        
        // 3.3.设置frame
        int row = index / totalColumns;
        int col = index % totalColumns;
        // 计算x和y
        CGFloat appX = marginX + col * (appW + marginX);
        CGFloat appY = 30 + row * (appH + marginY);
        appView.frame = CGRectMake(appX, appY, appW, appH);
        
        // 3.4.设置数据
        MJApp *app = self.apps[index];
        // 3.4.1.图片
//        UIImageView *iconView = appView.subviews[0];
        UIImageView *iconView = (UIImageView *)[appView viewWithTag:10];
        iconView.image = [UIImage imageNamed:app.icon];
        
        // 3.4.2.名称
//        UILabel *nameLabel = appView.subviews[1];
        UILabel *nameLabel = (UILabel *)[appView viewWithTag:20];
        nameLabel.text = app.name;
    }

 

•Xib文件可以用来描述某一块局部的UI界面
 
•Xib文件的加载
Ø方法1

NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"MJAppView" owner:nil options:nil];

这个方法会创建xib中的所有对象,并且将对象按顺序放到objs数组中

(如果xib如右图所示,那么objs数组中依次会有3个对象:1个UIView、1个UIButton、1个UISwitch)

 

Ø方法2

bundle参数可以为nil,默认就是main bundle

UINib *nib = [UINib nibWithNibName:@"MJAppView" bundle:[NSBundle mainBundle]];

NSArray *objs = [nib instantiateWithOwner:nil options:nil];

 

•在开发阶段,面向开发者的是xib文件; 当把应用装到手机上时,xib文件就会转为nib文件
 
posted @ 2014-09-03 17:43  Rails  阅读(255)  评论(0)    收藏  举报