在两个UIWindows之间切换

时间:2013-04-25 13:39:29

标签: ios push-notification uiwindow

我正在整合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];
}

在关闭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;


}];

现在我想在关闭此HTML页面时调用我的视图控制器。所以我尝试在此块完成中提供myviewcotrlller但不提示。

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

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

编辑:第二个uiwindow永远不是关键窗口,只有通过设置更高的windowlevel并变为隐藏才能看到它

1 个答案:

答案 0 :(得分:1)

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

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

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

  1. [appDelegate.window addSubview:myViewController.view];
  2. 模态:

    1. [appDelegate.window.rootViewController presentModalViewController:myViewController]
    2. 使用View Controller层次结构:

      1. 将viewController推送到主viewController堆栈。例如,如果你有navigationController,只需将它推到那里。
      2. 我希望它有所帮助!