Jac*_*ard 11 highlight background-color uiview ios subviews
我想在UITableViewCell点击它时使用默认突出显示.但是,我不希望自定义子视图(及其子视图)接收消息以更新其突出显示的状态,从而破坏backgroundColor属性.
编辑
"子视图"我指的是任何子UIView类,而不仅仅是UITableViewCells.
也许这种假设的情况会更好地表达我正在寻找的东西:我有一个UITableViewCell.叫它c.然后我添加一个UIView(称之为v)作为c的子视图.当我点击c时,我想要c突出显示(标准蓝色背景,白色字体颜色),但我不希望v突出显示.我该如何实现这一目标?
首先,UITableView会限制所有子视图,并向它们发送突出显示的消息.
因此,即使您在视图中放置了UILabel,无论它有多深,它都会遍历所有视图(通过使用子视图属性).
一个解决方案可以是(即IOS4 +),覆盖子视图属性,以及欺骗tableview的高亮函数,我们没有任何子视图.要做到这一点,我们需要确定调用者,如果是tableview的高亮显示方法,我们应该根本不返回任何子视图.
我们可以创建一个简单的UIView子类并覆盖下面的子视图.
- (NSArray *)subviews{
NSString* backtrace = [NSString stringWithFormat: @"%@",[NSThread callStackSymbols]];
if ([backtrace rangeOfString:@"_updateHighlightColorsForView"].location!=NSNotFound)
return [super subviews];
return [[NSArray new] autorelease];
}
Run Code Online (Sandbox Code Playgroud)
我有一个继承自的类UITableViewCell,所以我修复它覆盖setSelected:animated这样:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
//Reset highlighted status to all the childs that i care for.
[self.someChild setHighlighted:NO];
[self.someOtherChild setHighlighted:NO];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5407 次 |
| 最近记录: |