2016-12-15 13 views
0

ユーザーが現在表示しているビューコントローラに関係なくプッシュ通知を受け取ったときにバナーを表示しようとしています。swift - ユーザーがどこにいても、プッシュ通知バナーを表示

私はこの

if let window = UIApplication.shared.keyWindow { 


       window.addSubview(bannerView) 
      } 

だから私は私のビューコントローラのそれぞれにBannerControllerオブジェクトを作成し、それのデリゲートになっ購読しまうようなものを持っているでしょうBannerControllerクラスを作成していると考えることができる最もスケーラブルな方法。

その後、ユーザーがプッシュ通知を受け取ったときに、BannerControllerに通知を送信し、それを表示する操作を委任します。

私はBannerControllerのオブジェクトを各ビューコントローラに作成しなければならないので、これは完璧ではありません。

答えて

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)、あなた自身で書くこともできます。

+0

私は自分自身を作成するつもりですが、私はBannerControllerを静的メソッドにして、あなたの言葉を私の解決策にすると思います。私はあなたにそれがどのように行くのかを知らせます! – Walker

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() 
    } 
} 

コードから借りたり質問したりできます。

関連する問題