1

私は比較的単純なアプリを持っています。ユーザーが操作するフルスクリーンの UIView サブクラス (musicGridView) と、このクラスをロードする UIScrollView サブクラス (scrollView)、さらに ViewController と mainWindow.xib があります。

現在、myViewController タイプの viewController インスタンスが nib にロードされています。nib には、myViewController が指している myUIView のインスタンスもあります。

AppDelegate では、次のようにします。

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

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

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

私が考える方法は、[window addSubview:viewController.view] を appDelegate にロードし、viewController を musicGridView ではなく scrollView のインスタンスにポイントすることです。次に、scrollView awakeFromNib に musicGridView のサブビューを追加します。

最終的に、scrollView が所有する別のビューを作成したいと考えています。これは実際には、ユーザーが左にスクロールして到達できるサイド TabBar (特定の API では不可能) です。

だから私は、他のMVCのものの中で、問題は、viewControllerが、musicGridViewを含む他のすべてのコンテンツUIViewサブクラスを含むscrollViewを指す必要があるかということです?

4

2 に答える 2

0

私は UI 設計に Interface Builder を使用していません。私の経験では、すべて IB か、すべてプログラマティックにする必要があります。特定の問題を解決するには、musicGridView を UIScrollView のインスタンスまたは拡張にする必要があると思います。

これは、カスタム viewController の loadView メソッドで実行できます。プレーンな古い UIView ではなく、単純に UIScrollView に初期化 (および追加) します。

ただし、上記のように、UIViewController クラス リファレンスで確認されているように、このアプローチは IB 中心のアプローチと互換性がありません。

nib ファイルからビューをロードする場合を除き、UIViewController のすべてのサブクラスは、loadView メソッドを実装してビュー プロパティを設定する必要があります。

于 2009-06-15T00:59:36.243 に答える
0

UI のデザインに Interface Builder を使用していないようです。これは新しいプロジェクトなので、そうすることをお勧めします。このようなコードを書く必要はまったくありません。ただし、アウトレットとアクションを説明する必要があります。

IB を扱う際に知っておく必要がある最も重要な 2 つのことは、キーワードIBOutletIBActionキーワードです。

サンプル クラス ヘッダー:

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

- (IBAction) doWork;

@end

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

于 2009-06-12T22:57:24.293 に答える