1

クラスUIView内で aを宣言しました。これを別のクラスでUIViewController呼び出すことはできますか?UIViewUIViewController

可能な場合、どのように呼び出すことができますか?

4

2 に答える 2

1

はい、多数のビュー/viewController でビューの 1 つのインスタンスを使用できます。通常、広告を表示するビューでも同じことを行います。

他のオブジェクトと同じように、それらを渡します。Interface Bulder で作成しない場合 (プログラムで作成することをお勧めします)、ビュー コントローラーではなくアプリケーション デリゲート内で定義し、それを使用する個々のビュー コントローラーに渡すことができます。

View Controller内では、他のビューでも行うように、それに応じてサブビューとして追加してください。

ただし、1 つのことがあります。このビューを別のスーパー ビューに 2 回以上追加すると、以前のスーパー ビューから削除されます。つまり、以前のスーパー ビューが再び表示されるようになったときに、再度スーパー ビューとして追加する必要があります。ビューは、一度に 1 つのビュー階層の一部にしかなれません。


ゴードンのおかげで、サンプルコード:

/* Untested and simplified */
AppDelegate.h:
@property ( strong, nonatomic) ReuseableView reuseableView

;

AppDelegate.m

@synthesize reuseableView; 

/* in didFinishLaunchingWithOptions ...*/ 
reuseableView = [[alloc] init]; // or init from nib, initwithframe, etc. 

viewController.m

/* In each view controller that uses the view */
 - (void) viewWillAppear:(BOOL)animated 
{ 
  [self.view addSubview:((AppDelegate*)[UIApplication sharedApplication].delegate).reuseableView]; 
}

 - (void) viewWillDisappear:(BOOL)animated 
{ 
  [((AppDelegate*)[UIApplication sharedApplication].delegate).ReuseableView removeFromSuperview]; 

}


これremoveFromSuperviewが本当に必要かどうかはよくわかりません。次addSubviewはとにかく既存のスーパービューからそれを削除addSubviewし、同じスーパービューで2回続けて呼び出された場合、害はありません。removeFromSuperviewただし、この時点で使用して保存されます。

まあ、要約すると、基本的にはそれだけです。共通の場所で共有ビュー (Gordon の例では reusableView) を定義、作成、保存します。アプリケーション デリゲートは、そのための適切な場所です。共有ビューを使用する各ビューのコントローラーで、デリゲートからそれをフェッチし、サブビューとして現在のビューに追加します。

于 2012-07-13T08:56:08.490 に答える
0

UIView をサブクラス化し、使用したい ViewControllers にインポートします

    NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil];
    yourView = (YourView *)[nibArray objectAtIndex:0];

次に、そのフレームを設定し、[self.view addSubview:yourView]

于 2012-07-13T08:59:54.523 に答える