我有一个带有自定义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。
答案 0 :(得分:1)
您正在深入研究分段控件的无证子视图结构。没有公共API可以像你一样为一个片段着色。当实现在将来发生变化并且您获得的子视图没有响应'setTintColor:'方法时会发生什么?
您也依赖于子视图的顺序。订单可以改变。分段控件的实现可以随时间将子视图移动到后面或前面。您不能假设子视图0是第一个视图的视图。
这里最好的方法是创建UISegmentedControl的子类,或创建自己的自定义控件,使段正确地成为特定颜色。
答案 1 :(得分:0)
您可以尝试在CustomTableCell
类中实现prepareForReuse
方法来重置子视图,因为此消息在出列时可以重新发送到UITableViewCell
(或子类)实例以供重用在UITableView
。
答案 2 :(得分:0)
尝试在dequeueReusableCellWithIdentifier行后使用[cell.segmentedControl setTintColor:[UIColor clearColor]];