15

什么时候在方法中layoutSubviews调用自定义?下面,我需要在设置属性后被调用。我是否正确设置了此设置?我希望能够使用,因为我听说它对性能更好。UITableViewCellUITableViewCells cellForRowAtIndexPathlayoutSubviewsFiltersTableViewCellItemlayoutSubviews

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

3 回答 3

18

layoutSubviews在之后的某个时间点被调用,tableView:willDisplayCell:之后被调用tableView:cellForRowAtIndexPath:。您可以通过在相关方法中设置断点并查看它们被命中的顺序来验证这一点。例如,在tableView:cellForRowAtIndexPath:. 然后将以下方法添加到FiltersTableViewCell

- (void)layoutSubviews
{
    [super layoutSubviews];
}

并在那里设置一个断点。然后运行应用程序,看看会发生什么。

于 2013-02-01T08:32:15.600 回答
2

设置项目后尝试调用 setNeedsLayout。

filtersTableViewCell.filtersTableViewCellItem = filtersTableViewCellItem;
[filtersTableViewCell setNeedsLayout];
于 2015-06-28T18:40:46.060 回答
-1

如this answer中所述,在很多情况下都会调用它。我还要说,当可重用项目从可重用单元队列中出列时,它可能会被调用。在查找可重用项目之前尝试设置 FiltersTableViewCellItem。

于 2013-02-01T07:14:32.867 回答