gpt4 book ai didi

ios - 内部带有 UITableView 的 self 调整 UITableViewCell - self 调整不起作用

转载 作者:行者123 更新时间:2023-11-29 12:36:35 25 4
gpt4 key购买 nike

我在使用自调整单元格的新概念时遇到了问题。它们非常适合简单的自定义单元格,但是,我试图在我的自定义 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

以及 UIChecklistElementTableViewCell 的代码(.m 文件中没有“特殊”代码):

@interface ChecklistElementTableViewCell : UITableViewCell

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

@end

最佳答案

最后,我继续实现

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

我在其中返回包含 TableView 的单元格的计算高度,对于所有其他单元格,我返回 UITableViewAutomaticDimension。

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

关于ios - 内部带有 UITableView 的 self 调整 UITableViewCell - self 调整不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26161407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com