UIAppearance代理规则何时适用于新的视图控制器?

UIAppearance规则适用于一些新的视图控制器时,我正在游荡?

我已经制定了一些全球规则,并在我的应用程序委托中调用它们。 这样所有的UIButtons看起来都一样。 但是现在我想修改一个UIButton的外观。 我试着把代码删除它的背景里面- (void)viewDidLoad但它不工作 – UIAppearance规则尚未应用。 在一个ViewController中,我把修改代码放在- (void)viewWillLayoutSubviews ,它完美的工作,但现在在另一个ViewController中它不起作用(代码是相同的)。

超越UIA外表规则在哪里安全?

根据2011年WWDCvideo介绍UIAppearance,定制之前应用-layoutSubviews被称为视图。

如果您想要自定义一个特定的button,您应该:

  1. 直接修改button实例的属性,不要触摸类的外观设置

  2. 使用如下的appearanceWhenContainedIn:方法:

     [[UIButton appearanceWhenContainedIn:[CustomView class], nil] setBackgroundImage:myButtonImage forState:UIControlStateNormal]; 

这样,您仍然可以使用外观代理服务器作为特定的button(当您知道它包含在特定的视图中时),而不会改变一般的外观设置。