自訂uitableviewcell,uitableviewcell
建立繼承自uitableviewcell的子類
xib自訂樣式並指定其重用標示
配置cell資料
#import <UIKit/UIKit.h>@interface CellStyleTwo : UITableViewCell//工號@property (weak, nonatomic) IBOutlet UILabel *userCode;//電話@property (weak, nonatomic) IBOutlet UILabel *phoneNumber;/** * 配置 cell資料 */-(void)configureCellStyleTwo:(id)data;@end
/** * 配置 cell資料 * * @param data */-(void)configureCellStyleTwo:(id)data{ //如果資料是字典 NSDictionary* dictionary=(NSDictionary*)data; if (dictionary) { self.userCode.text=dictionary[@"usercode"]; self.phoneNumber.text=dictionary[@"userTel"]; }}
對於是不是需要重寫初始化,得看使用方法,如果是這樣使用的話就不需要
[self.tableView registerNib:[UINib nibWithNibName:@"CellStyleTwo" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"CellStyleTwo"];
因為這種方式系統是直接尋找得指定資源,不會使用預設建立方式
下面就需要
[self.tableView registerClass:[CellStyleTwo class] forCellReuseIdentifier:@"CellStyleTwo"];
-(nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier{ self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]; return [[[NSBundle mainBundle] loadNibNamed:@"CellStyleTwo" owner:self options:nil] firstObject];}
這種方式僅僅是指定了註冊的類,系統會使用預設的方式建立,但並不是我們所期望的,所以需要重寫起初始化。
但是cell的重用是一樣的
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell* uiTableViewCell= [tableView dequeueReusableCellWithIdentifier:self.nsStringIdentifier forIndexPath:indexPath]; self.blockConfigureCell(uiTableViewCell,self.nsArrayModels[indexPath.row]); tableView.tableFooterView=[[UIView alloc] initWithFrame:CGRectZero]; return uiTableViewCell;}