【问题标题】:How to globally style elements which doesn't support appearance如何全局样式化不支持外观的元素
【发布时间】:2012-03-24 15:39:36
【问题描述】:

我了解到,在 iOS 5 中,标有 UI_APPEARANCE_SELECTOR 的属性可以使用外观设置样式。例如 [[UINavigationBar 外观] setTintColor:....]。但是,我似乎无法为所有元素设置样式。例如,UIButton 没有标记为 UI_APPEARANCE_SELECTOR 的属性,因此我无法使用上述技术对其进行样式设置。

我的问题是:当我无法使用外观时,如何在全局范围内(应用程序中的所有外观)最好地设置元素样式?

现在我已经定义了一些颜色、字体、阴影偏移等,我在我的代码中使用了很多不同的地方。这允许我改变很多元素的外观和行为,但它仍然不允许我只用一行代码来设置某个对象的所有实例的样式。

编辑

由于缺乏更好的解决方案,我创建了许多categories,方法如下:

+ (UIButton *)customLabelWithFrame:(CGRect)frame andText:(NSString *)text;

我还发现 - 结合所描述的类别 - stretchable images 很好用。

通过以上方法,我能够以全局方式进行样式设置,但是我对结果不满意,我仍然希望找到更好的解决方案

【问题讨论】:

  • 我发现有些东西没有用 UI_APPEARANCE_SELECTOR 标记,但是,可以使用 UIAppearance...例如一些 UIView 属性。我不会建议将其作为一个好的答案,因为它可能会因任何版本而中断,但我发现其中逻辑胜过文档的案例。
  • 有趣。但我同意这可能不是最合适的方式。

标签: iphone ios appearance


【解决方案1】:

您自己提到的标准子类或工厂类怎么样!? 对于按钮,我自己使用工厂类。

【讨论】:

  • 不同 UI 元素的工厂已经明确地闪过我的脑海。可能是我太懒了,想找些简单的东西,需要的代码少得不切实际……
【解决方案2】:

我认为一个非常好的解决方案可能是 Android 设计界面的方式。 Android 依赖 XML 文件来定义用户界面。事实上,我正在开发一个库,旨在为我正在从事的项目提供大致相同的功能。它仍在进行中/实验,因此代码非常混乱(您已被警告!),但它可能会给您一些想法。

一个示例项目可以在这里下载:http://dl.dropbox.com/u/6487838/WSLayoutManager.zip

通过添加控件对 XML 文件进行一些实验。创建自定义控件类并从 XML 文件等实例化它们......这很有趣:)

【讨论】:

  • 感谢您提供一个不错的选择。我已经下载了你的示例项目,它看起来很有趣。但是,我一直在使用 WPF 和 XAML 文件,并且我更喜欢 IB 方式结合以某种方式以编程方式设置我的元素的样式,我现在正在寻求改进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 2016-10-18
  • 1970-01-01
相关资源
最近更新 更多