2009-06-12 11 views
0

私は比較的簡単なアプリを持っています。私はフルスクリーンのUIViewサブクラス(musicGridView)とユーザーがやり取りするUIScrollViewサブクラス(scrollView)と、ViewControllerとmainWindow.xibの両方でこのクラスを読み込みます。MVC:ビューをロードする場所は?

今、私は、タイプmyViewControllerのペン先にロードされたviewControllerインスタンスを持っています。ペン先にも、myViewControllerが指し示すmyUIViewのインスタンスがあります。 AppDelegateで

、私はこれを行う:私は思う

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

が間違っています。理想的には、appDelegateにはscrollViewのインスタンスがありません。

scrollViewのAwakeFromNibクラスでは、scrollViewで初期化を行います。

appDelegateで[window addSubview:viewController.view]をロードし、viewControllerをmusicGridViewの代わりにscrollViewのインスタンスにポイントします。次に、scrollView awakeFromNibで、musicGridViewのサブビューを追加します。

最後に、scrollViewが所有する別のビューを作成します。このビューは、実際には、ユーザーが左にスクロールして表示できるサイドのTabBar(指定されたAPIでは不可能です)です。

他のMVCの間では、viewControllerがscrollViewを指している必要があります。scrollViewには、musicGridViewを含む他のすべてのコンテンツUIViewサブクラスが含まれていますか?

+0

だから私はこれを試して空白の画面を表示しています。どこが間違っているのかわからない... – Craig

答えて

0

UIの設計にInterface Builderを使用していないようです。これは新しいプロジェクトなので、私はそれをお勧めします。このようなコードを書く必要はありません。しかし、アウトレットと行動を説明する必要があります。

IBを扱う際に知っておくべき最も重要な2点は、IBOutletIBActionのキーワードです。

Sampleクラスのヘッダーは:

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

- (IBAction) doWork; 

@end 

今、あなたのマウスを使って目的地にソースをドラッグすることで、Interface Builderのを使用して、これら2つの物事を配線することができます。あなたがこれを行う方法のより良い説明が必要な場合、YouTubeにはIBのチュートリアルビデオがたくさんあります。

0

私はUI設計にInterface Builderを使用していない人です。私の経験では、すべてのIB、またはすべてのプログラムのいずれかに行く必要があります。あなたの特定の問題を解決するために、私はあなたのmusicGridViewをUIScrollViewのインスタンスまたは拡張にする必要があると思います。

これは、独自のviewControllerのloadViewメソッドで行うことができます。単純な古いUIViewの代わりに、単純にUIScrollViewに初期化して(それに物を追加する)ことができます。上述のようにビューを設定するloadViewメソッド を実装する必要のUIViewController のUIViewController Class Reference

すべてのサブクラスで確認されているよう

しかしながら、このアプローチは、IB中心のアプローチと互換性がありませんプロパティ nibファイルからビューを読み込まない限り。

関連する問題