自定義單元格ios
當蘋果公司提供給的單元格樣式不能咱們的業務需求的時候,咱們須要自定義單元格。在iOS 5以前,自定義單元格能夠有兩種實現方式:代碼實現和用xib技術實現。用xib技術實現相對比較簡單,建立一個xib文件,而後定義一個繼承 UITableViewCell類單元格類便可。在iOS 5以後咱們又有了新的選擇,故事板實現方式,這種方式比xib方式更簡單一些。ide
咱們把簡單表視圖案例的原型圖修改一下,這種狀況下四種內置的單元格樣式就不合適了。佈局
採用「Single View Application」工程模版建立一個名爲「CustomCell」的工程,Table View屬性的「Prototype Cells」項目設爲1(除此以外其它的操做過程與上同)。atom
設計畫面中上部會有一個單元格設計畫面,咱們能夠在這個位置進行單元格佈局的設計。從對象庫拖拽一個Label和Image View到單元格設計畫面,調整好它們的位置。spa
建立自定義單元格類CustomCell, 選擇UITableViewCell爲父類設計
再 回到IB設計畫面,在IB中左邊選擇「Table View Controller Scene」 → 「Table View Controller」 → 「Table View」 → 「Table View Cell」,打開單元格的標識檢查器,在Class的選項中選擇CustomCell類。對象
爲Lable和ImageView控件鏈接輸出口繼承
本案例的代碼以下:get
- //
- // CustomCell.h
- // CustomCell
- #import <UIKit/UIKit.h>
- @interface CustomCell : UITableViewCell
- @property (weak, nonatomic) IBOutlet UILabel *name;
- @property (weak, nonatomic) IBOutlet UIImageView *p_w_picpath;
- @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.p_w_picpath.p_w_picpath = [UIImage p_w_picpathNamed:[rowDict objectForKey:@"p_w_picpath"]];
- NSUInteger row = [indexPath row];
- NSDictionary *rowDict = [self.listFilterTeams objectAtIndex:row];
- cell.textLabel.text = [rowDict objectForKey:@"name"];
- NSString *p_w_picpathPath = [rowDict objectForKey:@"p_w_picpath"];
- p_w_picpathPath = [p_w_picpathPath stringByAppendingString:@".png"];
- cell.p_w_picpath.p_w_picpath = [UIImage p_w_picpathNamed:p_w_picpathPath];
- cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
- return cell;
- }
咱們看到if (cell == nil){}代碼被移除,這是由於咱們在IB中已經將重用標識設定爲Cell了。 方法中的其它代碼與簡單表一致,此處再也不贅述。運行一下。