0

カスタム UITableCells を持つ UITableView があります。これらの UITableCells の内部には、UISegmentedControls があります。最初の UISegment だけの色合いを変更しようとしています。これは、UITableCell が dequeueReusableCellWithIdentifier によって再利用されるまで正しく機能します。下にスクロールすると、再利用された UITableCells が表示され始めると、最初のセグメントではなく、最後のセグメントが青色になります。cellforRowAtIndexPath の関連コードは次のとおりです。

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    CellIdentifier = @"CustomCell";
    CustomTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil) {
         cell = [[CustomTableCell alloc] init];
    }

    [cell.segmentedControl setTintColor:GRAY_COLOR];
    [[[cell.segmentedControl subviews] objectAtIndex:0] setTintColor:BLUE_COLOR];

    ...

    return (UITableViewCell *) cell;
}

この UISegmentedControl の UISegmentedControlStyle は、問題がある場合は UISegmentedControlStyleBar です。

4

3 に答える 3

1

セグメント化されたコントロールの文書化されていないサブビュー構造を掘り下げています。あなたがそうであるように、1つのセグメントに色合いを付けるための公開APIはありません. 将来実装が変更され、取得しているサブビューが「setTintColor:」メソッドに応答しない場合はどうなりますか?

サブビューの順序にも依存しています。順序は変更できます。セグメント化されたコントロールの実装により、時間の経過とともにサブビューを後方または前方に移動できます。サブビュー 0 が最初のセグメントのビューであると想定することはできません。

ここでの最善の方法は、UISegmentedControl をサブクラス化するか、セグメントを特定の色に適切に変更する独自のカスタム コントロールを作成することです。

于 2012-10-18T18:36:48.107 に答える
0

このメッセージは、で再利用するためにキューから取り出されたときに(またはサブクラス)インスタンスに送信されるためprepareForReuse、クラスにメソッドを実装しCustomTableCellてサブビューをリセットしてみてください。UITableViewCellUITableView

于 2012-10-18T18:35:50.990 に答える
0

dequeueReusableCellWithIdentifier 行の後に使用してみてください [cell.segmentedControl setTintColor:[UIColor clearColor]];

于 2012-10-18T18:38:42.473 に答える