首页 > 技术文章 > Xcode - storyboard_OC版 04:TableViewCell(数据绑定:属性)

self-epoch 2017-11-02 12:08 原文

TableViewCell

1 - 上篇我们了解 tag 传值,但是在开发中并不是很喜欢使用 tag 来访问视图,我们完全可以把这些视图链接到输出口,利用属性来使用它们

     新建 UITableViewCell 子类 WarriorCell。回到 storyboard 中选中 cell,将其 Class 修改成 WarriorCell:这就意味着当你向 TableView 请求 dequeueReusableCellWithIdentifier 时它就会返回一个 WarriorCell 实例。Identifier 的使用 WarriorCell 同类名保持一致,这样看起来更加规范

2 - 和控件建立起链接:现在你可以将两个 Label 和 ImageView (按住 ctrl 键)分别拖动至 WarriorCell,链接完毕之后应该是这个样子

3 - 现在只需要在  WarriorsViewController.m 文件中绑定数据

 1 #import "WarriorsViewController.h"
 2 #import "Warrior.h"
 3 #import "WarriorCell.h"
 4 @implementation WarriorsViewController{
 5     NSMutableArray *_warriorsArray;
 6 }
 7 
 8 - (void)viewDidLoad {
 9     [super viewDidLoad];
10     // 创建数组
11     _warriorsArray = [NSMutableArray arrayWithCapacity:0];
12     
13     // 制造数据
14     Warrior *player1 = [[Warrior alloc] init];
15     player1.nameStr = @"カカロット";
16     player1.fightingCapacityStr = [NSString stringWithFormat:@"戦力:%d",FC_Base];
17     player1.rating = 1;
18     [_warriorsArray addObject:player1];
19     
20     player1 = [[Warrior alloc] init];
21     player1.nameStr = @"セクシー";
22     player1.fightingCapacityStr= [NSString stringWithFormat:@"戦力:%d",FC_Base];
23     player1.rating = 2;
24     [_warriorsArray addObject:player1];
25     
26     player1 = [[Warrior alloc] init];
27     player1.nameStr = @"ベジータ";
28     player1.fightingCapacityStr = [NSString stringWithFormat:@"戦力:%d",FC_Base];
29     player1.rating = 3;
30     [_warriorsArray addObject:player1];
31 }
32 
33 #pragma mark - Table view data source
34 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
35 
36     return 1;
37 }
38 
39 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
40 
41     return _warriorsArray.count;
42 }
43 
44 // 直接使用属性
45 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
46 
47     WarriorCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WarriorCell" forIndexPath:indexPath];
48     Warrior *player = [_warriorsArray objectAtIndex:indexPath.row];
49     cell.warriorName.text = player.nameStr;
50     cell.warriorValues.text = player.fightingCapacityStr;
51     cell.warriorIcon.layer.masksToBounds = YES;
52     cell.warriorIcon.layer.cornerRadius = 3.2;
53     cell.warriorIcon.image = [self imageForRating:player.rating];
54     return cell;
55 }
56 
57 // 选取图片
58 - (UIImage *)imageForRating:(int)rating{
59 
60     switch (rating){
61         case 1: return [UIImage imageNamed:@"11.png"];
62         case 2: return [UIImage imageNamed:@"22.png"];
63         case 3: return [UIImage imageNamed:@"33.png"];
64     }
65     return nil;
66 }
67 @end

运行效果

4 -  编辑:删除

1 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
2     if (editingStyle == UITableViewCellEditingStyleDelete){
3         // 删除数据
4         [_warriorsArray removeObjectAtIndex:indexPath.row];
5         // 删除UI
6         [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
7     }
8 }

运行效果:编辑中...  |  删除完成

  

 

推荐阅读