2009-06-12 48 views
0

我有一個相對簡單的應用程序。我有一個用戶與之交互的全屏UIView子類(musicGridView),以及一個加載這個類的UIScrollView子類(scrollView),以及一個ViewController和mainWindow.xib。MVC:在哪裏加載視圖?

現在,我有一個viewController實例加載到nib中,它是myViewController類型。該筆尖也有myUIView的實例,myViewController指向該實例。

在AppDelegate中,我這樣做:

[window addSubview:scrollView]; 
[scrollView addSubview: viewController.view]; 
scrollView.musicGridView = (MusicGridView*) viewController.view; 

我認爲這是錯誤的。理想情況下,appDelegate沒有scrollView的實例。

在scrollView的AwakeFromNib類中,我對scrollView進行初始化。

我認爲應該去的方式是在appDelegate中加載[window addSubview:viewController.view],然後將viewController指向scrollView的實例而不是musicGridView。然後,在scrollView awakeFromNib中添加musicGridView的子視圖。

最後,我想創建scrollView擁有的另一個視圖,它實際上是一個用戶可以滾動到左側觸及的TabBar(對於給定的API是不可能的)。

所以我猜其中的MVC的東西,問題是,應該viewController指向scrollView,其中包含所有其他內容UIView子類,包括musicGridView?

+0

所以...我試過這個,只是空白的屏幕。不知道我要去哪裏錯... – Craig 2009-06-12 21:26:45

回答

0

這聽起來像你沒有使用Interface Builder來設計你的UI。由於這是一個新項目,我會建議這樣做。你不應該寫任何這樣的代碼。然而,你需要描述你的網點和行動。

您在處理IB時需要知道的兩件最重要的事情是IBOutletIBAction關鍵字。

樣品類的頭:

@interface MyClass : NSObject { 
    IBOutlet UIScrollView* myScrollView; 
} 

- (IBAction) doWork; 

@end 

現在你可以使用Interface Builder通過拖動源目的地用鼠標連線這兩件事情了。如果您需要更好地描述如何做到這一點,YouTube上有很多關於IB的教程視頻。

0

我是一個不使用Interface Builder進行UI設計的人;根據我的經驗,您需要全IB或全部程序化。爲了解決您的特定問題,我認爲您需要將您的musicGridView作爲UIScrollView的實例或擴展。

這可以在您的自定義viewController的loadView方法中完成 - 只需將其初始化爲UIScrollView(並將其添加到它),而不是普通的舊UIView。

然而,如上所述,這種方法是不與IB爲中心的方法兼容,如在UIViewController中 的UIViewController Class Reference

所有子類都被確認應該實現的loadView方法 設置視圖財產除非你 加載你的觀點從筆尖文件