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

Bjo*_*orn 38 cocoa objective-c

我更喜欢以编程方式创建我的接口.似乎Apple Developer上的所有文档都假设您正在使用Interface Builder.是否可以以编程方式创建这些接口,如果是这样,我从哪里开始学习如何执行此操作

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

Con*_*nal 36

我喜欢这个问题,而且我也想知道减少IB的资源.实用性("为什么")仅受想象力的限制.在我的脑海中,以下是明确编程UI的一些可能原因:

  • 实现更好的Interface Builder.
  • 编程动态UI,即静态不可知的结构(在编译/ xcode时).
  • 为UI实现跨平台库或语言的Cocoa后端.

有一系列关于没有笔尖工作的博客文章以及Michael Mucha最近在cocoa-dev上的描述.

  • 我也喜欢这个问题.事实上,我想知道如果你想这样做,接受的答案基本上是你的白痴.我只是为了一个iOS应用程序而去了xib-less(这个教程帮助了很多:http://vimeo.com/3363949),我现在希望在桌面上做同样的事情. (10认同)

Pet*_*sey 22

我更喜欢以编程方式创建我的接口.

为什么?Interface Builder更容易,更快捷.你不能通过拖放写一个拼写错误,当你手工输入矩形时,你不会得到那些非常方便的Aqua指南.

不要打它.Interface Builder是您的朋友.让它来帮助你.

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

不是基于文档的(通常是基于库的,如Mail,iTunes,iPhoto):创建NSObject的子类,实例化它,并使其成为应用程序的委托,并在委托的applicationDidFinishLaunching:方法中,创建一个窗口,用视图填充它,以及订购它.

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

  • "你不能通过拖放写错字"实际上,我发现,你可以......我通过意外地拖到错误的插座或绑定引起了奇怪的应用程序崩溃错误.Interface Builder是可以的,但它并不是万无一失的(不是说用手工创建接口就更好了,但是如果没有其他的话,ObjC中的错误会更加明显) (26认同)
  • 阿门.我曾经是那种"自己写一切"的心态.然后我了解了满足项目截止日期的意义.这真是令人大开眼界. (12认同)
  • 顺便说一句,Apple也避免使用IB:http://lapcatsoftware.com/blog/2008/10/20/working-without-a-nib-part-7-the-empire-strikes-back/ (6认同)
  • 我三倍.有趣的是,我最近有一些来自Java世界的开发人员也说他们更愿意自己编写接口......直到他们明白IB不生成任何代码而且不需要.猜猜IDE生成的swing代码真的很糟糕:-) (2认同)
  • 不使用IB的首要原因并非全世界都是Cocoa.如果您的目标包括Windows或Unix,则无论如何都必须再次使用Mac专用工具完成的任何工作.第二个原因是并非所有项目都是新的.继续使用现有代码的最小步骤不应该从更换整个UI开始. (2认同)
  • 这根本没有回答人的问题.仅仅因为你认为你不应该编写自己的代码并不意味着其他人有不同的意见.在许多情况下,您可能需要对界面构建器提供的UI进行更多控制,而且根本无法获得您想要的结果.此外,了解UI层的工作原理,因为您手动编码它将有助于您了解IB的工作原理.类似于C程序员,他具有一些硬件实际工作经验/知识,或者具有一些C++经验的Java程序员. (2认同)

小智 19

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

这意味着如果无法访问使用Cocoa而不使用IB的强大文档,我无法在Cocoa中为OS X/iPhone开发应用程序,这意味着我(具有讽刺意味)无法轻松开发OS X上的盲人(以及所有其他人)可访问的应用程序iOS版.

我目前的解决方案,我不想使用,是Java + SWT,当然这适用于OS X,而不是iOS.


小智 5

事实上,当您开始编写自己的 UI 类时,IB 就变得完全没有用了。假设您创建自己的按钮,该按钮使用基于 plist 的皮肤系统。或者您创建一个动态工具栏,根据用户选择加载和卸载项目。

IB不接受自定义UI元素,因此更复杂的UI无法使用他。是的,您会想要做 UIKit 为您提供的更复杂的事情。

  • 您绝对可以创建自己的 IB 元素。http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/IBPlugInGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40004323 (4认同)