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 }
运行效果:编辑中... | 删除完成