我对自定义大小的单元格的新概念感到困惑。它们对于简单的自定义单元格非常有用,但是,我试图在我的一个自定义UITableViewCells中包含一个UITableView。我以为我已经正确设置了所有内容,单元格内的UITableView有约束,并且所有内容以及委托和数据源也已连接。发生的情况是ChecklistTableViewCell中的'numberOfRowsInSection'被调用并返回5,但没有返回相应的cellForRowAtIndexPath。因此,应包括另一个UITableView的单元格仅显示为较小的单元格,没有内容。

我通过Google进行的“研究”告诉我,由于单元格的空间太小,可能无法调用cellForRowAtIndexPath。因此,我将所有单元格的rowHeight设置为某个常数,并显示该单元格内的UITableView,但是我松开了自调整大小功能。

因此,我的问题是,自定义大小的单元格不能与自定义单元格中的更复杂的组件一起使用,还是我缺少基本或重要的内容?

首先,我的UIViewController的代码:

@interface MyViewController ()

@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, strong) NSArray *elements;

@end

@implementation MyViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.estimatedRowHeight = 500.0;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}

#pragma mark - UITableView methods

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Element *element = self.elements[indexPath.row];
    if (something) {
        ...
    } else if (something else) {
        ChecklistTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
        if (cell == nil) {
            cell = [[ChecklistTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"];
        }
        cell.checklist = element.checklist;
        return cell;
    } else {
        ...
    }
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.elements count];
}

@end

这是我的其中包含UITableView的单元格的代码:
@interface ChecklistTableViewCell : UITableViewCell <UITableViewDataSource, UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITableView *checklistTableView;
@property (strong, nonatomic) NSArray *checklist;

@end


#import "ChecklistTableViewCell.h"

@implementation ChecklistTableViewCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)layoutSubviews
{
    [super layoutSubviews];

    // Setup table view (self-sizing cells!)
    self.checklistTableView.estimatedRowHeight = 50.0;
    self.checklistTableView.rowHeight = UITableViewAutomaticDimension;
}

#pragma mark - UITableView methods

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ChecklistElementTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"someIdentifier"];
    if (cell == nil) {
        cell = [[ChecklistElementTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"someIdentifier"];
    }
    cell.checklistElementTitleLabel.text = self.checklist[indexPath.row];
    return cell;
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.checklist count];
}

@end

还有UIChecklistElementTableTableViewCell的代码(.m文件中没有“特殊”代码):
@interface ChecklistElementTableViewCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *checklistElementTitleLabel;
@property (strong, nonatomic) IBOutlet M13Checkbox *checkbox;

@end

最佳答案

最后,我继续执行

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

在其中返回其中具有表格视图的单元格以及所有其他单元格的计算高度的地方,我返回UITableViewAutomaticDimension。

这不是我所希望的,但是可以。如果有人有其他解决方案,我仍然很感兴趣。

10-08 07:55