如何在没有Interface Builder的情况下创buildCocoa接口?

我宁愿以编程方式创build我的接口。 看起来好像苹果开发者的所有文档都假设你正在使用Interface Builder。 是否有可能以编程方式创build这些接口,如果是的话,我从哪里开始学习如何做到这一点

我认为这个相关的文件,如果可能的话,将在本节: http : //developer.apple.com/referencelibrary/Cocoa/idxUserExperience-date.html

我宁愿以编程方式创build我的接口。

为什么? Interface Builder更简单快捷。 你不能通过拖放来写错别字,而当你用手工input矩形时,你并没有得到那些如此方便的Aqua指南。

不要打它。 界面生成器是你的朋友。 让它帮助你。

如果你坚持通过在代码中编写你的UI来浪费自己的时间和精力:

不是基于文档的(通常是基于图书馆的,比如Mail,iTunes,iPhoto):创build一个NSObject的子类,实例化它,并使其成为应用程序的委托,并在委托的applicationDidFinishLaunching:方法中创build一个窗口, ,并命令它前面。

基于文档的(如TextEdit,Preview,QuickTime Player):在NSDocument的子类中的makeWindowControllers方法中,创build你的窗口(并填充视图)并为它们创build窗口控制器,确保发送你自己的addWindowController:对于每个窗口控制器。

我喜欢这个问题,我也想知道去IB的资源。 有用性(“为什么”)仅受限于想象力。 在我的头顶,这里有一些可能的原因来明确地编程用户界面:

  • 实现更好的界面生成器。
  • 编程dynamic用户界面,也就是那些结构不能静态知道(编译/ xcode时间)的用户界面。
  • 实现UI的跨平台库或语言的Cocoa后端。

有一系列的博客文章没有笔尖 , Michael Mucha最近对cocoa开发进行了描述 。

作为一个完全盲目的开发人员,我可以说IB与VoiceOver(OS X上的内置屏幕阅读器)不兼容。

这意味着,如果没有获得关于使用Cocoa没有IB的健壮的文档,我不能在Cocoa中为OS X / iPhone开发应用程序,这意味着我(具有讽刺意味的)不能轻松地开发可以在OS X / iOS版。

我当前不喜欢使用的解决scheme是Java + SWT,当然这适用于OS X,而不适用于iOS。

事实上,当你开始编写自己的UI类时,IB变得完全没有用处。 假设你创build了一个使用基于plist的皮肤系统的button。 或者您创build一个dynamic工具栏,根据用户select加载和卸载项目。

IB不接受自定义UI元素,所以更复杂的UI不能使用他。 是的,你会想要做更复杂的UIKit给你的东西。

虽然这是安静的有点老…我尝试了很多次,只能以编程方式做一切事情。 这很难,但可能。

更新 :我为这个特定的问题发布了另一个问题: 基于视图的NSOutlineView没有NIB? 现在我相信所有的事情都可以通过程序化的方式来完成,但是由于缺乏信息或者例子,如果没有苹果工程师的咨询,这是非常困难的。


在下面的论点可能是脱离主题,但我想说明为什么我强烈喜欢以编程方式。

我也喜欢编程的方式。 因为

  • 静态布局工具不能处理任何dynamic的。
  • 在多个NIB中重现相同的UI状态是困难的。 一切都是隐含的或隐藏的。 您需要访问所有面板才能find参数。 这种工作很容易犯错误 – 友善。
  • pipe理一致的状态是困难的。 因为再现相同的外观是困难的。
  • 自动化不可能 您无法创build自动生成的input表单。
  • 参数间接 – 例如由用户select的可变元素大小 – 是不可能的。
  • 瞄准小点比在固定位置按手指大小的键要困难得多 – 有趣的是这对于开发者来说是严重的可用性问题!
  • IB有时会拧紧。 这意味着它是可编译的,而且还在工作,但是当我打开源代码时,它看起来破损,额外的编辑变得不可能。 (你可能还没有经历过,但是如果XIB文件变得复杂,就必须这样做)
  • 这是基于图像的序列化。 这个概念很好。 但是这个问题只是图片库。 IB不会通过重放源代码来保留干净启动的源代码。 干净启动对于保证特定的运行状态非常重要。 另外,我们无法修复源代码中的错误。 Bug只是将被无限堆叠。 这是我们无法在IB中重现相同 (不相似)UI状态的核心原因。

当然,这些东西可以通过后期处理NIB UI来解决,但是如果我们必须重新configuration一切,那么就没有理由首先使用IB。

使用文本代码,很容易重现相同的状态 – 只需复制代码即可。 也容易检查和修复错误的部分 – 因为我们有完全的控制。 但在IB中,我们无法控制硬核细节。

IB不能成为最终的解决scheme。 这就像一个Photoshop,但即使是Photoshop提供基于文本的脚本设施。 GUI是一个移动的程序,而不是一个静态的图像或graphics。 即使对于GUI的可视化编辑,IB方法也是完全错误的。 如果你是苹果公司的一位读者,请求你尽快完全依赖于IB。