2012-09-19 83 views
5

是否可以從iOS應用程序的任何位置「彈出」視圖?從代碼中的任意位置彈出模態視圖

例如,我想要一個事件觸發(模態)滑動的視圖,並且該事件可以隨時發生在應用程序的任何屏幕上。

此外,我們希望這是可以包含在其他項目中的東西,並且希望他們不必爲這些項目做任何特殊的事情(除了引用項目中的線)。

回答

6

在這種情況下,您最好使用appdelegate,但這取決於您使用的是哪種應用程序。

創建的appdelegate的方法,你可以從任何視圖控制器

- (void)myMethod { 
    MyController *myController = [[MyController alloc] init]; 
    [self.window.rootViewController presentModalViewController:myController animated:YES]; 
} 

和解僱這個控制器,你必須創建的視圖 - 控制自己的行動呼籲。

注意:您一次只能有1個modelviewcontroller,因此請確保您的modelviewcontroller本身是一個導航控制器,以便將所有視圖堆疊在其中。

這樣的事情,

- (void)myMethod { 
    MyController *myController = [[MyController alloc] init]; 
    if([self.window.rootViewController modalViewController]) { 
      [(UINavigationController *)self.window.rootViewController.modalViewController pushViewController:myController animated:YES]; 
    } else { 
      UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myController]; 
      [self.window.rootViewController presentModalViewController:navController animated:YES]; 
    } 
} 
+0

關於一次只允許一個模式視圖控制器的說明,這不是Apple所說的(請參閱https://developer.apple.com/library/ios/featuredarticles/上的「模式視圖控制器鏈」 ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html) – Clafou

0

如果你想模態轉爲(或許還有一個按鈕?)駁回本身只需撥打:

[self dismissViewControllerAnimated:YES completion:NULL]; 

這將自動地把郵件到顯示它和解僱模態視圖控制器視圖控制器。