iOS界面构建器自定义样式?

9

简单的问题。 有人知道为什么Interface Builder不允许在UI元素上应用自定义样式吗? 为什么只能通过编程来实现?

我可以理解这可能对于自定义UIView子类而言可能很困难,但默认控件确实只有一小部分样式选项可以通过IB使用,例如背景颜色或更改字体颜色。 为什么会这样呢? 是否有任何方法可以通过IB实现应用程序主题等概念?


喜欢并投票+,因为我很感兴趣是否有其他人有不同的意见或经验。 - The Lazy Coder
嗨,我也想做同样的事情 - 定义自己的样式集并使 IB 实时从中提取 - 我认为我找到了一个好的解决方案。我在 https://dev59.com/vo_ea4cB1Zd3GeqPMU2- 上编写了一份指南。 - Rogare
4个回答

4
我的个人感觉是,苹果做得很好。他们提供符合HIG的元素和样式。如果他们开始添加其他元素/样式,那么从哪里开始,又在哪里划线呢?
此外,苹果也不会阻止使用自定义元素/样式,只是没有将其包含在工具集中。
我们最不需要的是一个充满冗余的工具集。

3
你真的必须问问苹果公司为什么这样做。我猜想这是促进标准界面元素的一致使用和有限开发资源的某种组合。
当然,你可以使用自己的自定义子类来构建界面元素。在IB中,你需要更改添加的每个对象的类型,从UIButton更改为MyGreenButton或其他类型,但这并不难。
另外,很容易想象出一种控制器类型的类,它可以连接到所有的控件,并以某种一致的主题方式自定义它们的外观。在每个nib文件中添加一个该类的实例,连接所有的控件,让它完成它的任务。当然,你只有在运行应用程序时才能看到效果,但这听起来像是在定制颜色和字体而不是大小。

我理解这可以通过编程的方式实现,(顺便问一下,像NSThemeController这样的东西存在吗?)但我只是想知道为什么它没有通过IB以某种自动化的方式实现,是否有任何未知的限制。 - donalbain
旧版本的IB支持自定义类的插件,但从未适用于iOS视图,我认为内置在Xcode 4中的IB目前不支持插件。我相信很多人都希望有这样的功能。我怀疑没有任何真正的技术限制会绝对阻止这样的事情,但实现这意味着不能实现其他东西。而且,没有NSThemeController,但正如我上面所说,你肯定可以编写一个。 - Caleb

1

不幸的是,你在全能的苹果神的掌控之下......向他们俯首称臣,并感谢他们所给予的一切.....哈哈......

但说真的,苹果会按照自己的意愿添加功能,你可以提出请求,但IB在功能方面相对较少。

我认为这可能是有意为之。某种程度上是优雅简约?

程序员可以自定义控件,但我认为他们希望控件标准化。我只是不知道为什么他们没有提供更多可用的控件样式,比如iOS设备上的几个按钮样式......

如果你发现有其他情况,请务必告诉我。


1
然而奇怪的是,我认为如果他们想要标准化,他们应该在IB中尽可能多地提供样式选项,而不是鼓励人们使用编程样式,因为我认为后者更容易引入图形不一致性。或者更好的是,提供主题概念,并提供一些预定义的“Apple批准”的主题获取方式。 - donalbain
但是iOS按钮只有一种样式。而且看起来很糟糕。通常我会使用类似工具栏按钮的按钮图像,并将其作为我的自定义按钮类型的背景进行拉伸。因为一个带有1像素边框的白色按钮...嗯,不行吧?我同意他们想要保持一致性,但这似乎有点麻烦,只是为了让它看起来“标准化”。 - The Lazy Coder
@DarkAngel - 为什么不花一天时间编写一个UIButton子类,以便按照你的要求进行绘制呢?然后你就可以在所有项目中使用该类。 - sosborn
这通常涉及将按钮样式设置为自定义,并按照所需进行图像背景设置。通常是一个伸展的图像,看起来像其他iOS按钮。有点麻烦。 - The Lazy Coder

0

我认为苹果应该让用户更多地自定义控件,对于游戏来说,制作自定义控件需要太多时间(而在安卓中,你可以在xml中配置以加快速度)。

另外,PaintCode是另一种为组件创建自己的样式的选择,它会生成代码,但更像界面构建器。

http://www.paintcodeapp.com/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接