0

我有一个带有自定义 UITableCells 的 UITableView。在那些 UITableCells 里面是 UISegmentedControls。我正在尝试仅更改第一个 UISegment 的色调颜色。这可以正常工作,直到通过 dequeueReusableCellWithIdentifier 重用 UITableCell。当向下滚动时重用的 UITableCell 开始出现时,最后一段被染成蓝色而不是第一段。下面是 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

您正在深入研究分段控件的未记录子视图结构。没有公共 API 可以像您一样为一个片段着色。当将来实现发生变化并且您获得的子视图不响应“setTintColor:”方法时会发生什么?

您还依赖于子视图的顺序。顺序可以改变。分段控制的实现可以随着时间的推移将子视图移到后面或前面。您不能假设子视图 0 是第一段的视图。

您最好的方法是继承 UISegmentedControl 或创建您自己的自定义控件,以正确地将段设置为特定颜色。

于 2012-10-18T18:36:48.107 回答
0

您可以尝试prepareForReuse在您的类中实现该方法CustomTableCell以重置子视图,因为此消息UITableViewCell在出列以在UITableView.

于 2012-10-18T18:35:50.990 回答
0

尝试在 dequeueReusableCellWithIdentifier 行 [cell.segmentedControl setTintColor:[UIColor clearColor]] 之后使用

于 2012-10-18T18:38:42.473 回答