UITableViewCell中的UISegmentedControl在通过dequeueReusableCellWithIdentifier重用时改变段索引顺序

时间:2012-10-18 18:30:25

标签: objective-c ios ios5 uitableview uisegmentedcontrol

我有一个带有自定义UITableCells的UITableView。在那些UITableCells里面是UISegmentedControls。我正在尝试改变第一个UISegment的色调颜色。这可以正常工作,直到通过dequeueReusableCellWithIdentifier重用UITableCell。当重新使用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。

3 个答案:

答案 0 :(得分:1)

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

您也依赖于子视图的顺序。订单可以改变。分段控件的实现可以随时间将子视图移动到后面或前面。您不能假设子视图0是第一个视图的视图。

这里最好的方法是创建UISegmentedControl的子类,或创建自己的自定义控件,使段正确地成为特定颜色。

答案 1 :(得分:0)

您可以尝试在CustomTableCell类中实现prepareForReuse方法来重置子视图,因为此消息在出列时可以重新发送到UITableViewCell(或子类)实例以供重用在UITableView

答案 2 :(得分:0)

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