自訂儲存格
當蘋果公司提供給的儲存格樣式不能我們的業務需求的時候,我們需要自訂儲存格。在iOS 5之前,自訂儲存格可以有兩種實現方式:代碼實現和用xib技術實現。用xib技術實現相對比較簡單,建立一個xib檔案,然後定義一個繼承 UITableViewCell類儲存格類即可。在iOS 5之後我們又有了新的選擇,故事板實現方式,這種方式比xib方式更簡單一些。
我們把簡單表視圖案例的原型圖修改一下,這種情況下四種內建的儲存格樣式就不合適了。
採用“Single View Application”工程模版建立一個名為“CustomCell”的工程,Table View屬性的“Prototype Cells”項目設為1(除此之外其它的操作過程與上同)。
設計畫面中上部會有一個儲存格設計畫面,我們可以在這個位置進行儲存格布局的設計。從物件程式庫拖拽一個Label和Image View到儲存格設計畫面,調整好它們的位置。
建立自訂儲存格類CustomCell, 選擇UITableViewCell為父類
再 回到IB設計畫面,在IB中左邊選擇“Table View Controller Scene” → “Table View Controller” → “Table View” → “Table View Cell”,開啟儲存格的標識檢查器,在Class的選項中選擇CustomCell類。
為Lable和ImageView控制項串連輸出口
本案例的代碼如下:
//// CustomCell.h// CustomCell#import <UIKit/UIKit.h>@interface CustomCell : UITableViewCell@property (weak, nonatomic) IBOutlet UILabel *name;@property (weak, nonatomic) IBOutlet UIImageView *image;@end//// CustomCell.m// CustomCell#import “CustomCell.h”@implementation CustomCell@end
CustomCell類的代碼比較簡單,在有些業務中還需要定義動作。
修改視圖控制器ViewController.m中的tableView: cellForRowAtIndexPath:方法,代碼如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{static NSString *CellIdentifier = @”Cell”;CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; }NSUInteger row = [indexPath row];NSDictionary *rowDict = [self.listTeams objectAtIndex:row];cell.name.text = [rowDict objectForKey:@"name"];cell.image.image = [UIImage imageNamed:[rowDict objectForKey:@"image"]];NSUInteger row = [indexPath row];NSDictionary *rowDict = [self.listFilterTeams objectAtIndex:row];cell.textLabel.text = [rowDict objectForKey:@"name"];NSString *imagePath = [rowDict objectForKey:@"image"];imagePath = [imagePath stringByAppendingString:@".png"];cell.image.image = [UIImage imageNamed:imagePath];cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;return cell;}
我們看到if (cell == nil){}代碼被移除,這是因為我們在IB中已經將重用標識設定為Cell了。 方法中的其它代碼與簡單表一致,此處不再贅述。運行一下。