iOS開發那些事--自定義單元格實現

自定義單元格ios

當蘋果公司提供給的單元格樣式不能咱們的業務需求的時候,咱們須要自定義單元格。在iOS 5以前,自定義單元格能夠有兩種實現方式:代碼實現和用xib技術實現。用xib技術實現相對比較簡單,建立一個xib文件,而後定義一個繼承 UITableViewCell類單元格類便可。在iOS 5以後咱們又有了新的選擇,故事板實現方式,這種方式比xib方式更簡單一些。ide

 

咱們把簡單表視圖案例的原型圖修改一下,這種狀況下四種內置的單元格樣式就不合適了。佈局

  1

    採用「Single View Application」工程模版建立一個名爲「CustomCell」的工程,Table View屬性的「Prototype Cells」項目設爲1(除此以外其它的操做過程與上同)。atom

 2

設計畫面中上部會有一個單元格設計畫面,咱們能夠在這個位置進行單元格佈局的設計。從對象庫拖拽一個Label和Image View到單元格設計畫面,調整好它們的位置。spa

 3

建立自定義單元格類CustomCell, 選擇UITableViewCell爲父類設計

 4

再 回到IB設計畫面,在IB中左邊選擇「Table View Controller Scene」 → 「Table View Controller」 → 「Table View」 → 「Table View Cell」,打開單元格的標識檢查器,在Class的選項中選擇CustomCell類。對象

 5

爲Lable和ImageView控件鏈接輸出口繼承

 6

本案例的代碼以下:get

 

  
  
  
  
  1. // 
  2.  
  3. //  CustomCell.h 
  4.  
  5. //  CustomCell 
  6.  
  7. #import <UIKit/UIKit.h> 
  8.  
  9. @interface CustomCell : UITableViewCell 
  10.  
  11. @property (weak, nonatomic) IBOutlet UILabel *name; 
  12.  
  13. @property (weak, nonatomic) IBOutlet UIImageView *p_w_picpath; 
  14.  
  15. @end 
  16.  
  17. // 
  18.  
  19. //  CustomCell.m 
  20.  
  21. //  CustomCell 
  22.  
  23. #import 「CustomCell.h」 
  24.  
  25. @implementation CustomCell 
  26.  
  27. @end 

CustomCell類的代碼比較簡單,在有些業務中還須要定義動做。原型

修改視圖控制器ViewController.m中的tableView: cellForRowAtIndexPath:方法,代碼以下:

 

  
  
  
  
  1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
  2.  
  3.  
  4. static NSString *CellIdentifier = @」Cell」; 
  5.  
  6. CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
  7.  
  8.     if (cell == nil) { 
  9.  
  10.         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
  11.  
  12.     } 
  13.  
  14. NSUInteger row = [indexPath row]; 
  15.  
  16. NSDictionary *rowDict = [self.listTeams objectAtIndex:row]; 
  17.  
  18. cell.name.text =  [rowDict objectForKey:@"name"]; 
  19.  
  20. cell.p_w_picpath.p_w_picpath = [UIImage p_w_picpathNamed:[rowDict objectForKey:@"p_w_picpath"]]; 
  21.  
  22. NSUInteger row = [indexPath row]; 
  23.  
  24. NSDictionary *rowDict = [self.listFilterTeams objectAtIndex:row]; 
  25.  
  26. cell.textLabel.text =  [rowDict objectForKey:@"name"]; 
  27.  
  28. NSString *p_w_picpathPath = [rowDict objectForKey:@"p_w_picpath"]; 
  29.  
  30. p_w_picpathPath = [p_w_picpathPath stringByAppendingString:@".png"]; 
  31.  
  32. cell.p_w_picpath.p_w_picpath = [UIImage p_w_picpathNamed:p_w_picpathPath]; 
  33.  
  34. cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
  35.  
  36. return cell; 
  37.  

咱們看到if (cell == nil){}代碼被移除,這是由於咱們在IB中已經將重用標識設定爲Cell了。 方法中的其它代碼與簡單表一致,此處再也不贅述。運行一下。

7

相關文章
相關標籤/搜索