我認爲這可能是您的最佳解決方案。在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.
}
然後,在您的視圖控制器,他們可能都顯示主頁按鈕,當他們出現:
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
[self.view addSubview:appDelegate.reusableHomeButton];
}
這需要的優勢[view addSubview:...]
這是故意的副作用,即如果視圖已經在某些父項中,則首先將其從該父項中移除,然後添加到新視圖。
它還利用了一個事實,即一個按鈕可以將其消息發送到任何對象。它不一定是ViewController按鈕的父視圖。
這會導致您的按鈕在顯示新控制器時從一個顯示的視圖控制器的.view中「移動」到新的視圖。因爲按鈕有一個AppDelegate對象的目標(並且因此將它的消息發送給該對象),所以只要應用程序委託對象存在以接收消息(它作爲只要你的應用程序正在運行)。
這是最明智的。我就是這樣做的。 – Jeremy 2013-03-10 20:33:17
謝謝。很高興知道我在理念上走在正確的軌道上。 – Diggory 2013-03-10 21:46:27