全面解析iOS应用中自定义UITableViewCell的方法

2020-01-15 13:30:04王振洲

        [tmpButton addTarget:self action:@selector(tmpButtonHandler:) forControlEvents:UIControlEventTouchUpInside];  
          
    }else{  
        NSLog(@"cell 重用啦");  
    }  
      
        UILabel *tmpLabel=(UILabel *)[cell viewWithTag:1];  
        NSString *text=[tmpArray objectAtIndex:indexPath.row];  
        tmpLabel.text=text;  
          
        UIButton *tmpButton=(UIButton *)[cell viewWithTag:2];  
          
        NSDictionary *attrDic=@{NSFontAttributeName:[UIFont systemFontOfSize:12.0f]};  
        CGSize labelSize=[text boundingRectWithSize:CGSizeMake(320, 990)  
                                            options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading  
                                         attributes:attrDic context:nil].size;  
          
        CGRect labelRect=CGRectMake(0, 0, labelSize.width, labelSize.height);//计算UILabel的rect  
        [tmpLabel setFrame:labelRect];  
        [tmpButton setFrame:CGRectMake(0, labelSize.height+1, 100, 50)];//计算UIButton 子控件的rect  
        [cell setFrame:CGRectMake(0, 0, labelSize.width, labelSize.height+50+1)];//cell的frame是以上两个子控件之和  
    
    return cell;  
}  
为何不再创建时设置frame,而是在if和else逻辑后面?
重用cell的时候,从重用cell队列里面取出的cell,其内容(UILabel)是之前的cell内容,需要重新填充UILabel并且重新计算

 

整个cell的frame并设置其frame。而创建cell的时候也需要设置frame,所以这两个逻辑重复,直接放在if else逻辑外面做。