ios - 如何在 iOS SDK 中禁用 UIView/UIViewController 的 "highlight subviews"消息?

标签 ios uiview background-color highlight subviews

我想在点击 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/

相关文章:

ios - 非可选的存储属性初始化

uiview - 如何让UIDatePicker出现在屏幕底部?

macos - NSView 有背景颜色吗?如果有的话我找不到

ios - URL 作为 Xcode 中的字符串和值

ios - Swift:如何以编程方式禁用 MapKit 注释的信息按钮

ios - 使用 iOS SDK 登录后通过 UIWebView 访问网页时保持 Facebook 身份验证

iphone - UIView内存管理

ios - 以编程方式创建 UINavigationBar

excel - 更改整个工作表的背景颜色

html - 显示事件类的背景颜色