クラスUIView
内で aを宣言しました。これを別のクラスでUIViewController
呼び出すことはできますか?UIView
UIViewController
可能な場合、どのように呼び出すことができますか?
クラスUIView
内で aを宣言しました。これを別のクラスでUIViewController
呼び出すことはできますか?UIView
UIViewController
可能な場合、どのように呼び出すことができますか?
はい、多数のビュー/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) を定義、作成、保存します。アプリケーション デリゲートは、そのための適切な場所です。共有ビューを使用する各ビューのコントローラーで、デリゲートからそれをフェッチし、サブビューとして現在のビューに追加します。
UIView をサブクラス化し、使用したい ViewControllers にインポートします
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil];
yourView = (YourView *)[nibArray objectAtIndex:0];
次に、そのフレームを設定し、[self.view addSubview:yourView]