iOS - TableView自定义cell的几种形式

应用背景:

当所写的几个cell版式几乎一样的时候,用自定义cell比较好。
步骤:

  1. 在UIViewController里 定义tableView,(记得注册)然后在底下协议中定义几个数组,将每个cell的文字和图片的名称写进去
  2. 在UITableViewCell里,分别定义cell中都会出现的文字按钮或者图片,
  3. 然后就好了
    UIViewController.m文件里
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 416, 1200)];
    
    
    [self.tableView registerClass:[MysuggestTableViewCell class] forCellReuseIdentifier:@"suggest"];

    self.tableView.delegate = self;
    self.tableView.dataSource = self;

    [self.view addSubview:_tableView];
    

    [self createUI];




- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
            MysuggestTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"suggest" forIndexPath:indexPath];
            NSArray *titileArr1 = @[@"假日",@"用户设计PK站",@"字体故事",@"板式整理术",@"水彩速绘",@"大白"];
            NSArray *nameArr1 = @[@"share小白",@"share小王", @"share小吕", @"share小王",@"share小王",@"share小白"];
            NSArray *timeArr1 = @[@"16分钟前", @"17分钟前", @"45分钟前", @"4小时前",@"4天前",@"7小时前"];
            NSArray *imageArr1 = @[@"1-1", @"3-1-2", @"3-1-3", @"3-1-4",@"3-3-1.jpeg",@"2-2-1"];
    
            cell.image1.image = [UIImage imageNamed:imageArr1[indexPath.section]];
            cell.label1.text = titileArr1[indexPath.section];
            cell.label2.text = nameArr1[indexPath.section];
            cell.label3.text = timeArr1[indexPath.section];
    
    
            return cell;
        
}

- (CGFloat)tableView: (UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    return 150;
}

//- (void)

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 6;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}

    

UITableViewCell.m

- (instancetype) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if([self.reuseIdentifier isEqualToString:@"suggest"]) {
        _label1 = [[UILabel alloc] init];
        [self.contentView addSubview:_label1];
        //_label1.text = @"假日";
        _label1.font = [UIFont systemFontOfSize:30];
        
        _label2 = [[UILabel alloc] init];
        [self.contentView addSubview:_label2];
        //_label2.text = @"share小白";
        _label1.font = [UIFont systemFontOfSize:17];
        
        _label3 = [[UILabel alloc] init];
        [self.contentView addSubview:_label3];
        _label3.font = [UIFont systemFontOfSize:12];
        //_label3.text = @"原创—插画-练习写作";
        
        _label4 = [[UILabel alloc] init];
        [self.contentView addSubview:_label4];
        _label4.font = [UIFont systemFontOfSize:12];
        //_label4.text = @"15分钟前";
//        _image1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1-1"]];
//        [self.contentView addSubview:_image1];
        
        _btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [_btn setImage:[[UIImage imageNamed:@"心.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
        _btn.titleLabel.font = [UIFont systemFontOfSize:10];
        [self.contentView addSubview:_btn];
        [_btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
        
        
        
        _btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [_btn1 setImage:[[UIImage imageNamed:@"眼睛.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
        _btn1.titleLabel.font = [UIFont systemFontOfSize:10];
        [self.contentView addSubview:_btn1];
        //[_btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
        
        
        
        _btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [_btn2 setImage:[[UIImage imageNamed:@"分享.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
        _btn2.titleLabel.font = [UIFont systemFontOfSize:10];
        [self.contentView addSubview:_btn2];
        //[_btn2 addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
        
        
        
        
        _Zan = [[UILabel alloc] init];
        _Zan.textColor = [UIColor blueColor];
        _Zan.text = @"102";
        _Zan.font = [UIFont systemFontOfSize:15];
        [self.contentView addSubview:_Zan];
        
        UILabel *Yan = [[UILabel alloc] init];
        Yan.frame = CGRectMake(330, 120, 50, 20);
        Yan.textColor = [UIColor blueColor];
        Yan.text = @"23";
        [self.contentView addSubview:Yan];
        
        UILabel *Fen = [[UILabel alloc] init];
        Fen.frame = CGRectMake(385, 120, 50, 20);
        Fen.textColor = [UIColor blueColor];
        Fen.text = @"62";
        [self.contentView addSubview:Fen];
        
        _image1 = [[UIImageView alloc] init];
        [self.contentView addSubview:_image1];
        
    }
    
    return self;
}

- (void) layoutSubviews {
    _image1.frame = CGRectMake(6, 6, 200, 120);
    _label1.frame = CGRectMake(225, 15, 200, 20);
    _label2.frame = CGRectMake(225, 40, 100, 15);
    _label3.frame = CGRectMake(225, 60, 200, 15);
    _label4.frame = CGRectMake(225, 80, 70, 15);
    _btn.frame = CGRectMake(225, 115, 30, 30);
    _btn1.frame = CGRectMake(295, 115, 30, 30);
    _btn2.frame = CGRectMake(355, 115, 30, 30);
    _Zan.frame = CGRectMake(260, 120, 50, 20);
}




- (void) click {
    if(_zanSelect == NO) {
        _zanSelect = YES;
        _Zan.text = @"103";
    }else {
        _zanSelect = NO;
        _Zan.text = @"102";
    }
}

效果图:
在这里插入图片描述
但其实很多时候并不需要建自定义cell,个人觉得自定义cell很麻烦
,还要新建一个文件并且注册啥的,还有其他的几种情况:

  1. 当cell排版基本相同,且里面包含东西很少(一般是只有文字而且明显版本一致,都是在一个组的时候,可以不定义cell),如果有图片或者按钮,一般要定义cell,因为这就要在协议函数里面写了,定义cell本来就是问了让协议函数不要太累赘。
  2. 其实tableview本身就很麻烦,可以定义分组的或者不分组的。如果分组的话,其实每组板式都不同,最好自定义cell,这个时候就可麻烦,首先你要注册好几个cell。然后你得想,是每一组中的版式都不完全一样,还是有的组里基本一样,都不一样的话,你要在协议函数里写好几个if(indePath.row/section == x) 然后分别对他们写各自的排版(cell和Control里面都要写很多,分很多种。这个时候其实不自定义cell的话,只在controller里面写会更直观,缺点是很累赘,总之这个时候怎么写都很麻烦。但是如果每组中同一组的样式基本一样,cell.m里就会好写一点,而且也可以不分组,我觉得分组和不分组的差别就是在判断的时候行和列的差别。

这是我自己的一点见解和分析,如果说的不好请谅解欢迎大佬来指正。说了这么多种情况,都没有放代码,其实最好的理解办法是自己敲一遍,自己的理解很重要,但是更重要的是动手实践啊!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值