为什么它像Interface Builder一样受到我的影响?

问题描述:

我对Cocoa MacOSX非常陌生,但我不禁感到自己在不断地与Interface Builder战斗。为什么它像Interface Builder一样受到我的影响?

我目前的情况是,我正在构建一个将有几个自定义控件和视图的应用程序。我开始在Interface Builder中构建应用程序,因为它最初很容易拖动,并使用正确的颜色和正确的自动调整规则将它们放入正确的位置。然而,现在是开始构建我的自定义控件和视图的时候了 - 我无法在界面构建器中很好地展示这些控件和视图,而无需通过构建IBPlugin的工作!我知道的唯一的另一个选项是有一个Interface Builder文档,其中包含一大堆“自定义视图”,只是改变了它们的类。突然间似乎毫无意义地对待IB - 尤其是鉴于这些控制和视图将具有需要设置的颜色等属性 - 就像IB文档中已有的其他视图和控件一样。所以现在我已经在两个不连贯的地方设置了可视化属性,并且似乎对抗了IB的潜在优势之一,这使得在不挖掘代码的情况下调整应用的UI相对容易。

我也遇到过几种控件根据数据或当前选择更改属性(如颜色)的情况。所以现在我有在Interface Builder中指定的控件的初始默认颜色,但是我必须在代码中指定数据驱动的颜色?再次,Interface Builder似乎让我不得不在它的世界和代码之间拆分一些演示设置。我想可以用一个复杂的插件来解决这个问题,这个插件可以知道我的数据或者状态或者其他信息,但是似乎我最终会维护大量的支持代码,所以Interface Builder的体验仍然是“正确的”。

我经常看到的其他东西是如何轻松地让IB定义组件之间的绑定。 “你可以在不写任何代码的情况下做到这一点!”再说一遍,我可能会错过一些东西,但根据我的情况,将一个属性绑定到另一个属性是单行代码。在IB中设置几个属性比写单行代码更好?为什么在表示层的规范中放入多少应用逻辑更好?我很喜欢这个Cocoa的东西,但是我觉得我错过了一些非常重要的关于如何使用Interface Builder的东西,或者它主要是为了一些简单的演示应用而设计的,高“哇”因素。

+0

让我们看看你的用户界面是什么样的。 – 2009-10-27 18:40:03

+1

下面的答案已经涵盖了我会做的任何一点,所以这只是一个评论,说:你并不孤单!我正在与另一名开发人员一起开发一个大型Cocoa项目的最后阶段。我们开始使用IB,但由于我们的用户界面是高度定制的,我们最终放弃了它。在我看来,IB非常适合学习Cocoa应用程序开发的基础知识,以及完全符合Apple UI标准的小型项目。大多数定制或复杂的应用程序将更好地在代码中弄清楚事情。 – 2009-10-28 03:37:53

+1

对于这个问题的一些更好的讨论:http://*.com/questions/1056079/is-there-a-way-to-programmatically-determine-the-proper-sizes-for-apples-built-i – 2009-10-28 03:40:16

我发现Interface Builder非常适合获取应用程序的通用布局。这对绑定(在Mac上)等事情也很棒。但是,您无法使用Interface Builder创建Delicious Library。界面越复杂,你需要编写的代码就越多。

我的第一个iPhone程序,可供出售,以及我的第二个开发中不使用Interface Builder。我喜欢在代码中包含所有内容,以便我能够理解正在发生的事情,以便我可以使用版本跟踪来跟踪所有更改。

据我所知,这归结于一个偏好问题。有可可书籍使用两种风格(IB和没有IB)。

+0

我在iPhone上也这么做 - 部分原因是当我开始iPhone开发时,IB几乎不支持它,所以我从来没有打扰过它的使用。然而,OSX世界似乎与我所经历的以IB为中心,所以它似乎只是“它是如何完成的”。我想我试图找出这种看法是否真的如此。你指出在这两方面都有书籍,所以我可以放心的是,如果我只是用IB来管理菜单栏并将其他所有内容留给代码,那么我可能不会失去任何重要的东西。 – Sean 2009-10-27 18:36:19

Jeff LaMarche(关于iPhone开发成名)写了an excellent article关于为什么IB是一个很好的选择,即使它在你通过基本教程后看起来不是正确的路线。由于类似的原因,我放弃了IB,但是这篇文章激励我继续使用它,它确实最终成为正确的解决方案,尽管它违背了极端的倾向,不允许太抽象的抽象。

+1

这篇文章似乎主要是一个例子,“使用它,因为我告诉你它很棒。”实际上只有一个参数(我注意到)是专门列出的,因为它不会产生代码,所以调试的代码更少。这听起来不错,但我不知道我完全购买。设置几个绑定或某些框架矩形需要点击并在IB中输入或在Objective-C中输入几行。这不像是那些代码行会在以后突然改变自己,并且错误会神奇地出现在那里。 – Sean 2009-10-27 19:51:22

接口构建器可以花费一点时间来适应。但是,如前所述,使用它越多,效果就越好。当然,自定义视图可以用代码完成,但IB是一个标准的原因。社区的Mac应用程序保持一定的UI质量标准,远远高于其他平台的UI标准。 IB使得符合这些标准要比在代码中做所有事情容易得多,没有可视化参考。

而且您不必在代码中执行所有操作以使您的UI在版本控制中。我所有的Cocoa项目都在自己的git仓库中,包含nib/xib文件。

所以给IB一个机会。越多使用它越容易。

+0

使用IB并不难。问题在于,它是否有意义,它看起来似乎导致了(至少对于这个项目而言)以不同方式设置了许多不同的属性 - 一些在IB中,一些在代码中,一些数据驱动等等,因为IB可以不支持我的自定义视图和事物,无需编写插件和一堆支持代码。 :/ – Sean 2009-10-27 19:40:24