4

我想在选择 UITableViewCell 的子视图(viewz)时将其排除在更改背景之外。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleBlue;

UIView *viewz = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
viewz.backgroundColor = [UIColor redColor];
[cell.contentView addSubview:viewz];

未选择单元格。一切都好。

http://img32.imageshack.us/img32/1599/screenshot20121129at123.png

单元格已将颜色更改为蓝色。没关系。但我不希望我的viewz将背景颜色更改为蓝色。我怎样才能做到这一点?

在此处输入图像描述

4

3 回答 3

6

将 setSelected:animated: 方法的空实现添加到 UITableViewCell 子类

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

}
于 2012-11-29T09:48:47.830 回答
2

看来您需要触摸背景颜色,否则默认单元格实现会为您更改它。如果您添加彩色边框,您会看到viewz仍然存在,即使您评论我更改背景颜色的行:

#define VIEWZ_TAG 1234

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ... 
    UIView *viewz = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
    viewz.backgroundColor = [UIColor redColor];
    viewz.tag = VIEWZ_TAG;
    viewz.layer.borderWidth = 1;
    viewz.layer.borderColor = [UIColor whiteColor].CGColor;
    [cell.contentView addSubview:viewz];
    ...
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if ([cell isSelected]) {
        UIView *viewz = [cell viewWithTag:VIEWZ_TAG];
        viewz.backgroundColor = [UIColor greenColor];
    }
}

如果您想在选择单元格时对其进行精细控制,您可以使用自定义UITableViewCell.

于 2012-11-29T13:13:38.047 回答
0

您只需添加自定义单元格,并在选择行上更改该视图的背景颜色。

于 2012-11-29T09:58:45.583 回答