我想在点击 UITableViewCell
时使用默认突出显示。但是,我不希望自定义 subview (及其 subview )接收更新其突出显示状态的消息,从而破坏 backgroundColor
属性。
编辑
“ subview ”是指任何 UIView
子类,而不仅仅是 UITableViewCell
。
也许这种假设情况能更好地阐明我在寻找什么:我有一个 UITableViewCell。称它为 c。然后我添加一个 UIView(称之为 v)作为 c 的 subview 。当我点击 c 时,我希望 c 高亮显示(标准蓝色背景,白色字体颜色),但是我不希望 v 突出显示。我该如何做到这一点?
最佳答案
首先,UITableView枚举所有的 subview ,并向它们发送高亮消息。
因此,即使您在 View 中放置了一个 UILabel,无论它有多深,它都会遍历所有 View (通过使用 subviews 属性)。
一个解决方案可以是(IOS4+),覆盖subviews属性,并欺骗tableview的高亮功能,我们没有任何 subview 。为此,我们需要确定调用者,如果是 tableview 的高亮方法,我们应该根本不返回任何 subview 。
我们可以创建一个简单的UIView 子类并重写 subview ,如下所示。
- (NSArray *)subviews{
NSString* backtrace = [NSString stringWithFormat: @"%@",[NSThread callStackSymbols]];
if ([backtrace rangeOfString:@"_updateHighlightColorsForView"].location!=NSNotFound)
return [super subviews];
return [[NSArray new] autorelease];
}
- callStackSymbols在IOS4+之后可用
- _updateHighlightColorsForView 是 UITableView 的方法,负责高亮所有 subview
关于ios - 如何在 iOS SDK 中禁用 UIView/UIViewController 的 "highlight subviews"消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417590/