それがおそらくあなたの最善の解決策だと思います。iOS では、ViewController はそのビューに使用できるすべてのスペースを占有します。自分で管理する「コンテナ」ビューがないと、作成したビュー コントローラはウィンドウ全体を占有し、表示したものすべてをカバーします。
ただし、プロジェクトによっては、より簡単な代替アプローチがあります。
中央の場所 (App Delegate クラスなど) に UIView オブジェクト (ボタン) を作成できます。そのビューには、メソッドにアタッチするボタンを含めることができます。
@implementation AppDelegate
- (void) someSetupMethod {
UIButton* b = [UIButton buttonWithType:UIButtonTypeCustom];
// setup whatever properties
// Now set button to call a method *on this AppDelegate object* ("self"):
[b addTarget:self action:@selector(homeButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
// Store the button definition somewhere permanant
self.reusableHomeButton = b;
}
- (void) homeButtonTapped:(id)sender {
// do something to pop view controllers back to what you want.
}
次に、View Controller で、表示時にすべてホーム ボタンを表示できます。
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
[self.view addSubview:appDelegate.reusableHomeButton];
}
[view addSubview:...]
これは、ビューがすでに何らかの親にある場合、最初にその親からビューを削除してから、新しいビューに追加するという意図的な副作用を利用しています。
また、ボタンがそのメッセージを任意のオブジェクトに送信できるという事実も利用しています。ボタンの親ビューをホストする ViewController である必要はありません。
これにより、新しいコントローラーが表示されるたびに、表示されているビューコントローラーの .view から新しいビューにボタンが「移動」されます。
ボタンには AppDelegate オブジェクトのターゲットがあるため (したがって、そのメッセージをそのオブジェクトに送信します)、メッセージを受信するアプリ デリゲート オブジェクトが存在する限り、「どこからでも」機能します (アプリがが走っています)。