6

是否可以从 iOS 应用程序中的任何位置“弹出”视图。

例如,我想要一个事件来触发视图滑入(模态),并且该事件可以在任何时间、在应用程序的任何屏幕上发生。

此外,我们希望这可以包含在其他项目中,并且希望他们不必对这些项目做任何特殊的事情(除了引用项目中的电线)。

4

3 回答 3

7

在这种情况下,您最好使用 appdelegate,但这取决于您使用的应用程序类型。

在 appdelegate 中创建一个可以从任何视图控制器调用的方法

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

并且要解除此控制器,您必须在视图控制器本身上创建操作。

注意:您一次只能拥有 1 个模型视图控制器,因此请确保您的模型视图控制器本身就是一个导航控制器,以便将所有视图堆叠在其中。

像这样的东西,

- (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];
     }
}
于 2012-09-19T04:34:16.623 回答
2

我创建了这个小递归方法来处理这个问题:https ://gist.github.com/MartinMoizard/6537467

这是 UIViewController 上的一个类别。您基本上可以从 window.rootViewController 调用它。

于 2013-09-12T13:46:36.523 回答
0

如果您希望模式自行关闭(也许有一个按钮?)只需调用:

[self dismissViewControllerAnimated:YES completion:NULL];

这将自动将其转发到显示它的视图控制器并关闭模态视图控制器。

于 2012-09-19T03:43:57.563 回答