【发布时间】:2013-03-09 13:45:13
【问题描述】:
当子类化 tableview 单元格进入选定状态时,我无法自定义其外观和行为。
我的单元格有三个标签,我在 initWithStyle: 方法中添加到它的内容视图中,如下所示:
cell1Label = [[UILabel alloc] initWithFrame:
CGRectMake(75.0f, 12.0f, 67.0f, 12.0f)];
cell1Label.backgroundColor = [UIColor clearColor];
cell1Label.textColor = [UIColor blackColor];
cell1Label.shadowColor = [UIColor whiteColor];
blah, blah, blah...
[self.contentView addSubview:cell1Label];
然后,我在子类中的 setSelected:(BOOL)selected animated:(BOOL)animated 方法的背景上放置了一个黑色叠加层:
UIView *backgroundView = [[UIView alloc] initWithFrame:
CGRectMake(0.0f, 0.0f, 150.0f, 70.0f)];
backgroundView.backgroundColor = [UIColor colorWithRed:
0.0 green:0.0 blue:0.0 alpha:0.4];
self.selectedBackgroundView = backgroundView;
问题从这里开始。因为我想在选择单元格时保持我的UILabel 可读,所以我需要更改它们的textColor 和shadowColor。但是,我似乎找不到这样做的好地方。
如果我将代码放在 setSelected:(BOOL)selected animated:(BOOL)animated 中,则不会发生任何事情;我似乎只能对 selectedBackgroundView 进行更改。
我也尝试使用 didSelectRowAtIndexPath: 和 didDeselectRowAtIndexPath: TableView 委托方法,例如:
CustomDataCell* selectedCell = (CustomDataCell*)[tableView
cellForRowAtIndexPath:indexPath];
selectedCell.cell1Label.shadowColor = [UIColor lightGrayColor];
selectedCell.cell1Label.textColor = [UIColor blackColor];
但是,当单元格离开可见区域时,此方法会出现一些问题。也就是说,如果我选择了一个单元格,那么它会离开可见区域,当我选择另一个单元格时,它的文本属性不会变回它们的正常状态。黑色背景应该会消失,但我分配给所选状态的新 textColor 和 shadowColor 仍然存在。
处理子类UITableViewCells 的选定(可能还有其他)状态的最佳、最可靠方法是什么?
我正在使用ARC;永远不要使用IB;在Xcode 4.6 和iOS 6.1 SDK 上。
【问题讨论】:
标签: iphone ios uitableview customization