Objective-c自带的cell样式根本无法满足我们的需求,所以我们不得不自己去创建cell。自定义cell的最简便方式,就是在tableview的cellforrow方法里去布局cell的样式,但是这样就会造成controller代码量变得很多,比较臃肿。所以,选择新建一个文件,进行封装。
首先创建一个继承于UITableViewCell的“ZTableViewCell”。
在“ZTableViewCell.h”文件中
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface ZTableViewCell : UITableViewCell
@property(nonatomic, strong) UILabel *nameLabel; //写上需要加入的属性
@property(nonatomic, strong) UILabel *ageLabel;
@end
在“ZTableViewCell.m”文件中
#import "ZTableViewCell.h"
@implementation JKWTableViewCell
//重写构造方法
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
//初始化属性,并将添加到视图上上
self.nameLabel = [[UILabel alloc] init];
[self.contentView addSubview:_nameLabel];
self.ageLabel = [[UILabel alloc] init];
[self.contentView addSubview:_ageLabel];
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
//设置位置
_nameLabel.frame = CGRectMake(0, 0, 50, 20);
_ageLabel.frame = CGRectMake(90, 0, 50, 20);
}
@end
下面则是在要显示的UIViewController中
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//第一种
ZTableViewCell *cell1 = [_tableView dequeueReusableCellWithIdentifier:kCell forIndexPath:indexPath];
//第二种
/*ZTableView *cell = UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:@"cell1"];
if (cell1 == nil) {
cell1 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell1"];
}*/
cell1.nameLabel.text = _arr[indexPath.row % 2];
cell1.ageLabel.text = _arr[indexPath.row % 2];
return cell1;
}