如何为不同的 UITableView 部分使用不同的表格视图单元格类

Posted

技术标签:

【中文标题】如何为不同的 UITableView 部分使用不同的表格视图单元格类【英文标题】:How to use different table view cell class for different UITableView sections 【发布时间】:2015-02-08 13:55:10 【问题描述】:

我能做到这一点吗?

if (indexpath.section == 0) 
    // Use Class 1
 else if (indexpath.section == 1) 
    // Use Class 2
 

我试过了,但没用

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    // Return the number of sections.
    return 2;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    // Return the number of rows in the section.
    return 1;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    if (indexPath.section == 0) 
        OneTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"One" forIndexPath:indexPath];
        if( cell == nil)
            cell = [[OneTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"One"];
        
        cell.oneLabel.text = @"HAHAHA";
        return cell;
    else
        TwoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Two" forIndexPath:indexPath];
        if( cell == nil)
            cell = [[TwoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Two"];
        
        cell.twoLabel.text = @"HEHEHE";
        return cell;
    

【问题讨论】:

详细解释什么不起作用。 您是否使用正确的标识符在UITableView 中注册了每个课程? 【参考方案1】:

根据您显示的代码,您的 oneLabeltwoLabel 永远不会被初始化。如果您想快速修复,可以将它们都替换为textLabel。如下,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    if (indexPath.section == 0) 
        OneTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"One" forIndexPath:indexPath];
        if( cell == nil)
           cell = [[OneTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"One"];
        
        cell.textLabel.text = @"HAHAHA";  // Modified
        return cell;
     else 
        TwoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Two" forIndexPath:indexPath];
        if( cell == nil)
            cell = [[TwoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Two"];
        
        cell.textLabel.text = @"HEHEHE";  // Modified
    

您将能够在表格视图中看到两个不同部分的不同文本。它们确实是不同的TableviewCell 类。

但是,如果您想为不同的UITableViewCell 使用不同的标签,那么您必须确保它们在某处被初始化。例如,您可以覆盖自定义表格视图单元格中的默认 UITableviewCell 初始化程序。例如,在您的OneTableViewCell.m 文件中,在@implementation@end 之间添加以下内容。在这种情况下,您可以在 UITableView 类中使用您的原始代码。

@implementation OneTableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style
              reuseIdentifier:(NSString *)reuseIdentifier

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if ( self ) 
          _oneLabel = [[UILabel alloc] init];
          [self.view addSubView:self.oneLabel];
    
    return self; 


@end

【讨论】:

以上是关于如何为不同的 UITableView 部分使用不同的表格视图单元格类的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 表格视图的不同部分使用不同的单元格类型

如何为分组表部分设置不同的背景图像..?

如何为uiview的不同部分添加多个UITapGestureRecognizer?

如何为 UITableView 部分标题动态设置背景颜色?

如何为自定义 UITableView 标题部分笔尖添加分隔线? [复制]

如何为 UICollectionViewCompositionalLayout 中的不同部分设置多个背景视图