【问题标题】:Custom UIWindow not showing自定义 UIWindow 不显示
【发布时间】:2015-10-31 18:28:12
【问题描述】:

我创建了一个自定义窗口

let alertWindow = UIWindow(frame: UIScreen.mainScreen().bounds)
let background = UIToolbar(frame: alertWindow.frame)
background.barStyle = .Black
background.translucent = true
alertWindow.addSubview(background)
alertWindow.makeKeyAndVisible()

仅当我将 UIWindow 变量作为全局变量放入 AppDelegate 时才会出现。

我看到很多 Pod 使用自定义 UIWindow 作为通知横幅或自定义 AlertView。但他们没有将自定义 UIWindow 放在 AppDelegate 中,而是放在自定义类中。

例如:
这是来自 CRToast 的代码 https://github.com/cruffenach/CRToast

@interface CRToastManager () <UICollisionBehaviorDelegate>
@property (nonatomic, readonly) BOOL showingNotification;
@property (nonatomic, strong) UIWindow *notificationWindow;
@property (nonatomic, strong) UIView *statusBarView;
@property (nonatomic, strong) UIView *notificationView;

他将自定义窗口放在 CRToastManager 类中,而不是应用程序委托中,在我的情况下,当我将它放在自定义类中时,它不会出现。它需要在应用委托中是可变的。

如何显示自定义窗口并将其放入自定义类中?

【问题讨论】:

    标签: ios objective-c swift uikit uiwindow


    【解决方案1】:

    您是否尝试使用窗口内容创建 ViewController 并设置 rootViewController 属性?

    【讨论】:

    • 我试过了,除非窗口是AppDelegate类中的全局变量,否则它没有出现。
    • @EdwardAnthony windowLevel 呢?是否设置为 UIWindowLevelAlert ?
    • 是的,我将它设置为 UIWindowLevelAlert,仍然没有工作。我读了这个stackoverflow.com/questions/28002992/… 它需要是全局变量才能工作。但是 CRToast 将 window 变量放在了他的自定义类中。
    • 您需要在某处保存对第二个窗口的引用,您可以像主窗口一样在 AppDelegate 中拥有它。我在 AppDelegate 中有一个属性,我只设置了 windowLevel 及其显示。
    • @EdwardAnthony 它不一定要在那里,它必须放在一个有强烈参考的地方才能展示它。
    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多