当用户获得推送通知时,无论用户当前正在查看哪个视图控制器,我都试图展示横幅广告。
我能想到的最具扩展性的方法是创建一个类似于此的BannerController
类
if let window = UIApplication.shared.keyWindow {
window.addSubview(bannerView)
}
所以我会在每个视图控制器中创建一个BannerController
对象,并订阅成为它的委托。
然后,当用户收到推送通知时...向我的BannerController
发布通知,然后委托显示该动作的操作。
这似乎并不完美,因为我必须在每个视图控制器中创建一个BannerController
对象,我想在其中显示...任何想法?
答案 0 :(得分:0)
您可以遍历所呈现的视图控制器,然后在顶部视图控制器上显示模态视图控制器。
let alert = UIAlertController(
title: "Alert",
message: "Message",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(...))
if let window = window, var currentVC = window.rootViewController {
while currentVC.presentedViewController != nil
currentVC = currentVC.presentedViewController!
}
currentVC.present(alert, animated: true)
}
在这个示例中,我使用的是UIAlertController,但您可以将其切换为与警报描述相匹配的内容。有很多开源的(https://github.com/bryx-inc/BRYXBanner),或者你可以编写自己的。
答案 1 :(得分:0)
我遇到了类似的问题并为其创建了自己的库:MDNotificationView
它使用您的方法在所有视图之上显示横幅。您也可以直接从AppDelegate
执行此操作。
let view = MDNotificationExpandedImageLayoutView()
view.imageView.image = UIImage(named: "Face")
view.titleLabel.text = "New message from someone"
view.textLabel.text = "Hello."
// You can pass any UIView here.
let notificationView = MDNotificationView(view: view)
notificationView.delegate = self
notificationView.show()
// MARK: - Notification View Delegate
func notificationDidShow(notificationView: MDNotificationView) {
// Hide the notification view automatically after 5 seconds.
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
notificationView.hide()
}
}
随意借用代码或提问。