我有自定义UITableViewCell
。我想访问单元格属性,即UILabel
等。我尝试插入以下代码:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CategorieCell *customCell = (CategorieCell *)[tableView cellForRowAtIndexPath:indexPath];
return ...
}
当我运行应用程序时,它崩溃但没有给我错误详细信息。问题出在新的customCell I' m创建。还有其他方法可以访问customCell.m
个对象吗?
答案 0 :(得分:2)
关于崩溃,请注意您正在使用cellForRowAtIndexPath:这是您必须实现的UITableViewDatasource的方法,此方法默认调用heightForRowAtIndexPath,因此它将成为递归
我假设您希望在此方法中使用自定义单元格以获取其高度。 实现这一目标的最佳方法是在CategorieCell上编写一个类方法,为具有特定数据的单元格提供高度。
其他选项是使用代码提取方法以获取uitableviewcell,例如
(CategorieCell*) categorieCellForIndex:(NSIndex)index selected:(BOOL)selected{
...
}
答案 1 :(得分:1)
永远不应该在heightForRowAtIndexPath
中调用cellForRowAtIndexPath
。
第一个在第二个之前被调用,如果你需要访问标签(例如计算文本的高度),你通常可以初始化一个单元格。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
static CategorieCell *cell;
if (!cell) {
cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
cell.frame = CGRectMake(0, 0, tableView.frame.size.width-tableView.contentInset.left-tableView.contentInset.right, cell.frame.size.height);
[cell layoutIfNeeded];
}
cell.label.text = myDatasourceText;
CGFloat cellHeight = ....
return cellHeight;
}
注1:
我使用dequeueReusableCellWithIdentifier
假设您正在使用Interface Builder,否则您需要使用alloc] initWithStyle:...]
;
注2:
如你所见,我设置了单元格的框架。这是必需的,否则您的单元格将默认为(320 x 44)
。您可以在iPhone 6/6+ (i.e. screen width: 414)
或iPad
中,并且您可能需要根据标签的宽度和文字来计算标签的高度,因此您需要设置标签的框架。细胞
注3:
我假设您有一组相同的单元格结构,因此我使用static
单元格,因此它将重用而不分配其他无用的单元格
答案 2 :(得分:1)
尝试注册您的自定义单元格类:
[self.tableView registerClass:[CategorieCell class] forCellReuseIdentifier:NSStringFromClass([CategorieCell class]);
然后在-tableView:heightForRowAtIndexPath:
做类似的事情:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CategorieCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([CategorieCell class)];
}