首先,UITableView枚举所有的子视图,并向它们发送高亮消息。
因此,即使您在视图中放置了UILabel,无论它有多深,它都会遍历所有视图(通过使用 subviews 属性)。
一种解决方案可以是(即 IOS4+),覆盖subviews属性,并欺骗 tableview 的高亮功能,我们没有任何子视图。为此,我们需要确定调用者,如果它是 tableview 的 highlight 方法,我们应该根本不返回子视图。
我们可以创建一个简单的UIView子类并覆盖下面的子视图。
- (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的方法,负责高亮所有的children