Iphone 从代码中的任意位置弹出模态视图

Iphone 从代码中的任意位置弹出模态视图,iphone,ios,xcode,Iphone,Ios,Xcode,是否可以从iOS应用程序中的任何点“弹出”视图 例如,我希望一个事件触发一个视图滑入(模态),并且该事件可以在应用程序的任何屏幕上随时发生 此外,我们希望此功能可以包含在其他项目中,并且希望他们不必对这些项目执行任何特殊操作(参考项目中的连线除外)。如果您希望模态自动关闭(可能需要一个按钮?),只需调用: [self dismissViewControllerAnimated:YES completion:NULL]; 这将自动将其转发给显示它的视图控制器,并关闭模式视图控制器。在这种情况下,

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

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


此外,我们希望此功能可以包含在其他项目中,并且希望他们不必对这些项目执行任何特殊操作(参考项目中的连线除外)。

如果您希望模态自动关闭(可能需要一个按钮?),只需调用:

[self dismissViewControllerAnimated:YES completion:NULL];

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

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

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

- (void)myMethod {
    MyController *myController = [[MyController alloc] init];
    [self.window.rootViewController presentModalViewController:myController animated:YES];
}
要解除此控制器,必须对viewcontroller本身创建操作

注意:一次只能有一个modelviewcontroller,因此请确保modelviewcontroller本身是navigationcontroller,以便将所有视图堆叠在其中

像这样的,

- (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];
     }
}

我创建了这个小的递归方法来处理这个问题:


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

关于一次只允许一个模态视图控制器的注意事项,这不是苹果所说的(请参阅第页的“模态视图控制器链”)