2010-07-27 80 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