什么时候为自定义UITableViewCell调用layoutSubviews?

时间:2013-02-01 06:02:48

标签: iphone ios cocoa-touch uitableview

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];
}

3 个答案:

答案 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。