在设计UIAppearance时,你如何针对特定的UIViews?

时间:2012-04-03 00:44:27

标签: iphone ios cocoa-touch ios5

我在iOS 5中使用UIAppearance设置全局样式。这是一个例子:

[[UIbarButtonItem appearance]
    setTtitletextAttributes:someStyle
    forState:UIControlStateNormal
];

在大多数情况下看起来不错:

enter image description here

但有些情况下,全球风格看起来很丑陋,就像在电影播放器​​中一样。

enter image description here

对于电影播放器​​,我更喜欢使用默认的蓝色按钮。那么我如何只针对后退按钮的外观而不是完成按钮的外观呢?我在定位普通表格单元格和分组表格单元格方面存在类似问题。

3 个答案:

答案 0 :(得分:6)

您需要使用UINavigationBar的自定义子类。我们称之为MyNavigationBar。然后你可以这样做:

[[UIBarButtonItem appearanceWhenContainedIn:[MyNavigationBar class], nil]
    setTintColor:[UIColor redColor]];

它只会影响导航栏中的按钮,而不会影响MPMoviePlayerController的导航栏。

问题当然是UINavigationController总是使用基本UINavigationBar ...如果您在代码中创建它。但是,如果您在笔尖中创建它,则可以单击其导航栏(在笔尖的文档大纲中)并在“标识”检查器中更改该栏的类。

答案 1 :(得分:4)

如果在您的AppDelegate中,您只需替换

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navback"]
                                   forBarMetrics:UIBarMetricsDefault];

[[UINavigationBar appearanceWhenContainedIn:[UINavigationController class], nil]
 setBackgroundImage:[UIImage imageNamed:@"navback"] forBarMetrics:UIBarMetricsDefault];

电影播放器​​在全屏模式下会有适当的黑条。适用于iOS 5和iOS 6

答案 2 :(得分:-1)

您实际上可以将代理更改为仅定位某些视图层次结构。换句话说,当您要自定义的视图包含在某个视图中时,您可以修改其外观与其他视图不同。因此,首先设置全局(白色)样式,然后调用以下方法来自定义按钮出现在MPMoviePlayerController或其他任何内容时的外观。

[[UIBarButtonItem appearanceWhenContainedIn: 
      [MPMoviePlayerController class], nil] 
      setTitletextAttributes:someStyle
      forState:UIControlStateNormal];

如果有帮助,请告诉我!