15

メソッド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];
}
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

この回答で述べたように、それが呼び出される多くの例があります。また、再利用可能なアイテムが再利用可能なセルのキューからデキューされたときに呼び出される可能性があるとも言えます。再利用可能なアイテムを探す前に、FiltersTableViewCellItemを設定してみてください。

于 2013-02-01T07:14:32.867 に答える