2017-04-17 2 views
0

Wenn eine Nachricht zwischen Benutzern (Gerät an Gerät) gesendet wird, erhält der empfangende Benutzer eine Benachrichtigung, wenn die App nicht im Fokus ist. Zusammen mit der Anmeldung sollte der Plakettenwert für diese Registerkarte um 1. In einem Versuch erhöhen, dies zu tun, ich habe eine NotificationCenter Aktion erstellt, die handleNotificationReceived Block in OneSignal des erlischt (innerhalb initLaunchWithOptions) wie folgt:Festlegen eines Ausweiswerts aus einer empfangenen Benachrichtigung mit OneSignal

handleNotificationReceived: { (notification) in 
      //Notification 
      NotificationCenter.default.post(name: MESSAGE_NOTIFICATION, object: nil) 
      print("Received Notification - \(notification?.payload.notificationID ?? "")") 
    }, 

und die Beobachter innerhalb der Messaging Registerkarte mit einer Funktion angeordnet, dass die Registerleiste Abzeichen erhöht:

NotificationCenter.default.addObserver(self, selector: #selector(addBadge), name: MESSAGE_NOTIFICATION, object: nil)

//Adds a badge to the messages bar 
func addBadge(){ 
    self.navigationController?.tabBarController?.tabBar.items?[3].badgeValue = "1" 
    if #available(iOS 10.0, *) { 
     self.navigationController?.tabBarController?.tabBar.items?[3].badgeColor = ChatMessageCell.indexedColor 
    } else { 
     // Fallback on earlier versions 
    } 
} 

Allerdings kann ich den Ausweiswert für den Benutzer immer noch nicht anzeigen

Antwort

1

Es hängt davon ab, wie Ihre View-Controller-Hierarchie eingerichtet ist. Wie Sie versuchen, auf badgeValue zuzugreifen, ist es wahrscheinlich, dass es nicht festgelegt wird, da eine dieser optionalen Eigenschaften NULL zurückgibt. Setzen Sie einen Haltepunkt auf dieser Zeile und überprüfen Sie ihre Werte, um zu erfahren, welcher.

Wenn Ihr View-Controller in einem Navigationssteuerung eingebettet und Navigation-Controller ist das erste Kind in der Hierarchie Registerkarte wie

UITabBarController -> UINavigationController -> UIViewController

dann von der UIViewController Sie bekommen könnte Um den Ausweis Wert wie folgt .

navigationController wird den nächsten Vorgänger, der ein UINavigationController ist, zurückgeben. Wenn dies der erste untergeordnete Controller in der Registerkartenhierarchie ist, gibt die Eigenschaft tabBarItem das UITabBarItem für die Registerkarte zurück, und Sie können dort den Badge-Wert aktualisieren.

//Adds a badge to the messages bar 
func addBadge(){ 
    if let currentValue = navigationController?.tabBarItem.badgeValue { 
     let newValue = Int(currentValue)! + 1 
     navigationController?.tabBarItem.badgeValue = "\(newValue)" 
    } else { 
     navigationController?.tabBarItem.badgeValue = "1" 
    } 

    if #available(iOS 10.0, *) { 
     navigationController?.tabBarItem.badgeColor = ChatMessageCell.indexedColor 
    } else { 
     // Fallback on earlier versions 
    } 
} 
Verwandte Themen