【问题标题】:trouble with displaying another UIWindow显示另一个 UIWindow 的麻烦
【发布时间】:2013-04-09 17:50:27
【问题描述】:

我正在编写一个 iPad 应用程序,并试图在我的应用程序的主窗口顶部显示第二个 UIWindow。我要做的主要事情是创建一个登录窗口 (how to present a login, with UISplitViewController?),似乎在这里创建第二个窗口可能是一个不错的选择。

我制作了一个非常简单的应用程序来尝试一下。当用户点击一个按钮时,我试图显示第二个窗口。代码如下:

- (IBAction)showOtherWindow:(id)sender {
    UIWindow* otherWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    otherWindow.hidden = NO;
    otherWindow.clipsToBounds = YES;
    otherWindow.windowLevel = UIWindowLevelStatusBar;
    otherWindow.backgroundColor = [UIColor redColor];
    [otherWindow makeKeyAndVisible];
}

我希望在这里看到一个大的红色屏幕,但这并没有发生 - 没有任何变化。最终,我希望在顶部浮动一个较小的窗口。但现在我只想看到一个窗口。

【问题讨论】:

    标签: ios ipad uiwindow


    【解决方案1】:

    如果您使用 ARC 代码,您的窗口会在 showOtherWindow: 返回后立即被释放。尝试将 otherWindow 分配给持久对象中的 ivar。

    【讨论】:

    • 啊。不敢相信我犯了这样一个脑残的错误。当然,这就是为什么我没有看到它。我会尽快接受这个答案。
    • 哇,不被接受反对票。这将教我回答@DanMorrow 实际提出的问题!
    • 很确定你现在可以接受这个作为答案;-)
    【解决方案2】:

    将窗口指针分配给 __strong 实例变量 (ivar) 或强属性。关闭窗口后将 ivar 或属性设置为 nil。

    【讨论】:

      【解决方案3】:

      在 iOS 中,您有一个可以填满整个屏幕的窗口。你可以创建一个 UIViewController/UIView 并以模态模式打开它。

      从你的主视图控制器你可以做类似的事情

      UILoginViewController *login = [[UILoginViewController alloc] init]; 
      login.modalPresentationStyle = UIModalPresentationFormSheet; // or whatever you prefer
      
      login.completionWithItemsHandler = hdl;
      
      [self presentViewController:login animated:YES completion:nil];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-31
        • 2013-09-18
        相关资源
        最近更新 更多