美文网首页
iOS storyBoard与xib混合使用定制UITableV

iOS storyBoard与xib混合使用定制UITableV

作者: 呼哮山庄 | 来源:发表于2016-08-08 08:44 被阅读1618次

    xib文件可以针对某些视图控制器或者视图进行定制,而storyboard是xib文件的整合,可以开发整个app的框架。可以这么理解,xib上的视图之间是独立无法通过连线来关联,但storyBoard上的控制器之间可以通过连线来关联,这为我们减少了代码量。 今天我们准备了一个小例子,来实现storyboard和xib的混合使用来定制UITableViewCell。


    STEP 1:使用storyboard创建我们的视图控制器和tableview.png

    首先我们创建一个单视图项目,此项目默认自带Main.storyboard并且已经关联好ViewController类了。其次我们往storyboard自带的ViewController的view中拖入一个UITableView,此步我们为view中添加了tableView。

    重点又来了,很多同学会拖拖拽拽,但是不知道什么时候需要进行关联,这里有个简单的方法进行判断:1.由我们自己拖上去的UI控件系统并没有帮我们关联,所以需要我们自己进行关联;2.如果这个UI控件需要签署代理,那么它被拖进哪个父视图或父视图控制器就需要去实现协议。如此实例,该tableView需要实现UITableViewDelegate和UITableViewDataSource协议可以由view 或ViewController来实现。但分析一下,view是ViewController自带的视图,如果想让view来实现协议,我们必须给view创建一个UIView子类来进行关联后才能实现,所以为了方便起见,我们让ViewController来实现协议,如下图,右键单击tableView拖住delegate和dataSource往ViewController上关联。

    STEP 2:TableView关联代理.png

    上一步我们的代理签署好了,那么如果你想去访问这个tableView必须给他关联到ViewController类中,选择关联到.h或者.m的区别在于:.h是对外可以访问的关联,.m是对外访问不到的关联。

    tableView与viewController关联.png

    首先我们创建CocoaTouch类,继承自UITableViewCell,同时选中”Also create XIB file”,这样创建的xib自带的tableViewCell就自动关联到我们创建的TableViewCell类上。

    创建tableViewCell

    按照下图,拖入一个UIImageView和两个UILabel,当然你可以按照你的设计自己DIY一下。注意,我们拖入的控件默认是放在tableViewCell的contentView中的。

    屏幕快照 2016-08-08 08.08.54.png

    由XIB创建的tableViewCell在注册的时候需要提供一个identifier,这一点没得商量,所以一定要设置好哦!因为一个XIB文件中也可以有很多个视图,identifier是标记它的唯一性。

    屏幕快照 2016-08-08 08.11.32.png

    此文档是我创建,此控件是我拖拽,所以如果想调用XIB上的控件必须关联到类,下图把XIB中拖拽进去的控件关联到我们创建的类,然后你就不需要做什么了。真的吗?真的!因为XIB中我们已经调整好了位置和大小,除非你对自己的拖拽不太满意。

    屏幕快照 2016-08-08 08.15.18.png

    下面在ViewController中完成最后一步
    #import "ViewController.h"
    //1.导入头文件
    #import "TableViewCell.h"
    //2.实现代理
    @interface ViewController () <UITableViewDelegate,UITableViewDataSource>
    @property (weak, nonatomic) IBOutlet UITableView *tableView;
    //创建数据源
    @property (nonatomic,strong)NSMutableArray *dataSource;
    @end
    @implementation ViewController
    - (void)viewDidLoad {
    [super viewDidLoad];
    //初始化数据源
    self.dataSource = [NSMutableArray array];
    for (int i = 0; i < 10; i++) {
    NSDictionary *dic = @{@"image":@"1",
    @"label1":@"name",
    @"label2":@"content"};
    [_dataSource addObject:dic];
    }
    [_tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:@"pool"];
    }
    //返回每组行数
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _dataSource.count;
    }
    //返回每个cell
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"pool"];
    cell.picture.image = [UIImage imageNamed:_dataSource[indexPath.row][@"image"]];
    cell.titleLable.text = _dataSource[indexPath.row][@"label1"];
    cell.contentLabel.text = _dataSource[indexPath.row][@"label2"];
    return cell;
    }
    //返回行高
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 100;
    }
    - (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

    相关文章

      网友评论

          本文标题:iOS storyBoard与xib混合使用定制UITableV

          本文链接:https://www.haomeiwen.com/subject/yjoksttx.html