是否可以從iOS應用程序的任何位置「彈出」視圖?從代碼中的任意位置彈出模態視圖
例如,我想要一個事件觸發(模態)滑動的視圖,並且該事件可以隨時發生在應用程序的任何屏幕上。
此外,我們希望這是可以包含在其他項目中的東西,並且希望他們不必爲這些項目做任何特殊的事情(除了引用項目中的線)。
是否可以從iOS應用程序的任何位置「彈出」視圖?從代碼中的任意位置彈出模態視圖
例如,我想要一個事件觸發(模態)滑動的視圖,並且該事件可以隨時發生在應用程序的任何屏幕上。
此外,我們希望這是可以包含在其他項目中的東西,並且希望他們不必爲這些項目做任何特殊的事情(除了引用項目中的線)。
在這種情況下,您最好使用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];
}
}
如果你想模態轉爲(或許還有一個按鈕?)駁回本身只需撥打:
[self dismissViewControllerAnimated:YES completion:NULL];
這將自動地把郵件到顯示它和解僱模態視圖控制器視圖控制器。
我創造了這個小遞歸的方法來解決這個問題:https://gist.github.com/MartinMoizard/6537467
這是UIViewController的一個類別。你基本上可以從window.rootViewController調用它。
關於一次只允許一個模式視圖控制器的說明,這不是Apple所說的(請參閱https://developer.apple.com/library/ios/featuredarticles/上的「模式視圖控制器鏈」 ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html) – Clafou