在deviseUIA外观时如何针对特定的UIView?

我用UIA设置iOS 5的全球风格。 这是一个例子:

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

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

在这里输入图像说明

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

在这里输入图像说明

对于电影播放器​​,我宁愿有默认的蓝色button。 那么我怎么只瞄准后退button的外观而不是完成button的外观呢? 我有针对正常表格单元格和分组表格单元格的类似问题。

您实际上可以将代理更改为仅针对某些视图层次结构。 换句话说,当你想要定制的视图被包含在一个特定的视图中,你可以修改它的外观不同于其余的。 所以先设置你的全局(白色)风格,然后调用下面的方法来自定义button出现在MPMoviePlayerController或其他任何地方的外观。

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

让我知道如果有帮助!

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

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

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

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

如果在你的AppDelegate你只是replace

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

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

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