层次结构中的UIAppearance实例

时间:2015-05-20 02:55:56

标签: ios uitableview uiappearance

来自Apple关于UIAppearance的文档:

  

要自定义容器类实例(或层次结构中的实例)中包含的类实例的外观,请使用+ appearanceWhenContainedIn:作为相应的外观代理。

     

在任何给定的视图层次结构中,最外层的外观代理获胜。特异性(链条的深度)是决胜局。

     

换句话说,包含语句被视为部分排序。给定一个具体的排序(实际的子视图层次结构),我们选择从窗口向下读取实际层次结构时第一个唯一匹配的部分排序。

有人可以举例说明可以指定层次结构的情况吗?

考虑我希望仅针对特定UITableViewCells子类的实例设置UITableViewController样式的情况

[[UITableViewCell appearance] setTintColor:[UIColor whiteColor]];

但仅针对其中一个SomeXYZTableViewController's个实例,即两个不同的SomeXYZTableViewController实例,我想要一种不同的色调。

还有很多其他方法可以做到这一点,但我只是想知道是否可能。

1 个答案:

答案 0 :(得分:2)

  

但仅适用于其中一个SomeXYZTableViewController实例

这当然是可能的,但让我们采取更简单,更可能的方式来做到这一点。你可以继承UITableView。让我们调用子类WhiteTableView。它什么都不做;它只是一个子类。您可以将其中一个表视图设为WhiteTableView。

现在你可以指定表视图单元格应该具有白色调颜色,但只有在它们位于WhiteTableView中时才会显示。

我在书中给出的例子 - 来自现实生活 - 是:

[[UIBarButtonItem appearance]
    setTintColor: [UIColor myGolden]];
[[UIBarButtonItem appearanceWhenContainedIn:
    [UIToolbar class], nil]
        setTintColor: [UIColor myPaler]];
[[UIBarButtonItem appearanceWhenContainedIn:
    [UIToolbar class], [DrillViewController class], nil]
        setTintColor: [UIColor myGolden]];

这意味着:

  1. 一般情况下,条形按钮项应该是浅黄色。

  2. 但工具栏中的栏按钮项是个例外:它们应该更苍白。

  3. 但DrillViewController视图中工具栏中的栏按钮项是异常的例外:它们应该是黄金。