2010-07-27 79 views
1

我有一个编码风格的问题,可能应该问一个高级的mac程序员在工作 - 但因为我是唯一的mac程序员,所以它是。我有一个用于我的软件(3D模型,数据可视化)的弹出式GUI,弹出窗口主要是一个Tabbed控件,在每个选项卡(滑块,单选按钮,复选框等)中包含大量东西。每个选项卡的控件,以及六个选项卡......使用单个控制器处理所有视图将会非常快速地实现。可可NSTabView编码风格问题

有一个MainViewController加载一堆Tabs好风格?

NSView *tabA = [[NSView alloc] initWithNibName:@"tabA.nib" bundle:[NSBundle bundleWithPath:@"/Applications/BOB.app"]]; 
NSView *tabB = [[NSView alloc] initWithNibName:@"tabB.nib" bundle:[NSBundle bundleWithPath:@"/Applications/BOB.app"]]; 

这是kindof我如何做到这一点在iOS上,但我不知道在Mac OS X我喜欢的风格,提供可维护性和灵活性,因为代码正在经历的原型,我可能需要改变它经常。

如果不是很好的风格,那是什么?

谢谢!

回答

2

我认为你是一个合理的风格。您为每个选项卡创建一个NSViewController子类,并使用NSTabViewItem将其分配给NSTabView

顺便说一句,我认为这是最好有

NSViewController *tabAcontroller = [[TabAController alloc] init]; 

@interface TabAController:NSViewController ... @endinit定义为

-init{ 
    self=[super initWithNibName:@"tabA" bundle:nil]; 
    if(self){ 
     ... 
    } 
    return self; 
} 

需要注意的是,当你调用initWithNibName:bundle:不需要扩展.nib。而你不应该指定应用程序的硬编码路径。在iOS中,应用程序的位置由操作系统给出(具有隐藏的文件夹名称),但在OS X上,用户可以将应用程序包自由移动到任何他想要的位置。所以,绝对不要将主包称为[NSBundle bundleWithPath:@"hard coded path"]。在大多数情况下,只使用[NSBundle mainBundle]或仅使用nil。当你只能使用nil时,它会写在文档中。

+0

伟大。这是一些小东西,如建议子类化(这有助于封装),我从来没有找到任何地方。谢谢。 – 2010-07-28 13:20:12

+0

不客气。每个选项卡往往不同,并且通常需要专门的支持代码,所以我认为将这些代码放在专用的视图控制器中会更好。然后,标签视图的控制器可以交换单个视图。 – Yuji 2010-07-28 15:31:55