在两个UIWindows之间切换

Arc*_*ive 5 uiwindow push-notification ios

我正在整合Pushwoosh SDK for Push Notification,它UIWindow用于表示从Pushwoosh门户发送的HTML页面

- (void) showWebView {
    self.richPushWindow.alpha = 0.0f;
    self.richPushWindow.windowLevel = UIWindowLevelStatusBar + 1.0f;
    self.richPushWindow.hidden = NO;
    self.richPushWindow.transform = CGAffineTransformMakeScale(0.01, 0.01);

    [UIView animateWithDuration:0.3 animations:^{
        self.richPushWindow.transform = CGAffineTransformIdentity;
        self.richPushWindow.alpha = 1.0f;
    } completion:^(BOOL finished) {
    }];

}

- (void) showPushPage:(NSString *)pageId {
    NSString *url = [NSString stringWithFormat:kServiceHtmlContentFormatUrl, pageId];
    HtmlWebViewController *vc = [[HtmlWebViewController alloc] initWithURLString:url];
    vc.delegate = self;
    vc.supportedOrientations = supportedOrientations;

    self.richPushWindow.rootViewController = vc;
    [vc view];
}
Run Code Online (Sandbox Code Playgroud)

在关闭HTML页面时,它会调用

self.richPushWindow.transform = CGAffineTransformIdentity;
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
    self.richPushWindow.transform = CGAffineTransformMakeScale(0.01, 0.01);
    self.richPushWindow.alpha = 0.0f;


} completion:^(BOOL finished) {
    AppDelegate * appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];

    self.richPushWindow.hidden = YES;


}];
Run Code Online (Sandbox Code Playgroud)

现在我想在关闭这个HTML页面时调用我的视图控制器.所以我试图myviewcotrlller在这个区块完成但没有呈现.

实际上这里的问题是我的应用程序中有两个UIWindows是app和sdk使用的其中一个.现在,如果我尝试从单独的UIWindow上的这个html页面呈现视图控制器,那么它会创建一个单独的层次结构,当我关闭此窗口时,由于父子关系也会删除我呈现的viewconroller.如果不关闭此窗口,那么如何回到app的实际流程.

我希望新控制器应该从该新窗口显示,并且该窗口应该关闭,应用程序流不应受其他窗口的影响.可能吗?如果我的想法是错误的,请帮助,如果有人有想法

编辑:第二个uiwindow永远不是关键窗口,它只有通过设置更高的窗口级别变得可见并变得隐藏

小智 1

问题是,在此完成块之后 richPushWindow 将消失,实际上这意味着您正在尝试在隐藏窗口上呈现视图控制器。

解决方案非常简单。使用主窗口来呈现视图控制器。一些伪代码:

将 ViewContoller 中的视图添加到主窗口子视图:

  1. [appDelegate.window addSubview:myViewController.view];

模态:

  1. [appDelegate.window.rootViewController PresentModalViewController:myViewController]

使用视图控制器层次结构:

  1. 将你的 viewController 推送到主 viewController 堆栈。例如,如果您有 navigationController,只需将其推到那里即可。

我希望它有帮助!