在layoutSubviews
UITableViewCell
方法中,如何UITableViewCells
调用自定义cellForRowAtIndexPath
?下面,我需要在设置layoutSubviews
属性后调用FiltersTableViewCellItem
。我是否正确设置了此设置?我希望能够使用layoutSubviews
,因为我听说它的性能更好。
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"FiltersTableViewCell";
FiltersTableViewCell *filtersTableViewCell = [[self dequeueReusableCellWithIdentifier:cellIdentifier] retain];
FiltersTableViewCellItem *filtersTableViewCellItem = [[self.filtersTableViewCellItems objectAtIndex:[indexPath row]] retain];
if (!filtersTableViewCell)
{
filtersTableViewCell = [[FiltersTableViewCell alloc] initWithFiltersTableViewCellItem:filtersTableViewCellItem];
filtersTableViewCell.delegate = self;
}
else
{
filtersTableViewCell.filtersTableViewCellItem = filtersTableViewCellItem;
}
return [filtersTableViewCell autorelease];
}
答案 0 :(得分:16)
layoutSubviews
之后的某个时刻调用 tableView:willDisplayCell:
,tableView:cellForRowAtIndexPath:
之后调用tableView:cellForRowAtIndexPath:
。您可以通过在相关方法中设置断点并查看它们的命中顺序来验证这一点。例如,在FiltersTableViewCell
的末尾设置断点。然后将以下方法添加到- (void)layoutSubviews
{
[super layoutSubviews];
}
{{1}}
并在那里设置断点。然后运行应用程序,看看会发生什么。
答案 1 :(得分:1)
设置项目后尝试调用setNeedsLayout。
filtersTableViewCell.filtersTableViewCellItem = filtersTableViewCellItem;
[filtersTableViewCell setNeedsLayout];
答案 2 :(得分:-1)
正如本answer所述, 有很多情况会被调用。我还会说,当可重用项目从可重用单元队列中出列时,可能会调用它。尝试在查找可重用项目之前设置FiltersTableViewCellItem。