1

Возможно ли как-то наблюдать за свойством UIApplication.sharedApplication() в swift?Swift соблюдать UIApplication property

Мне нужно отслеживать UIApplication.sharedApplication().applicationIconBadgeNumber, чтобы обновить мое приложение UI на основе этого номера, но всякий раз, когда это свойство изменено, пользовательский интерфейс не изменяется.

Мой код относительно этого:

private var badgeCount: String = String(UIApplication.sharedApplication().applicationIconBadgeNumber) 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    self.notificationsButton.setTitle(self.badgeCount, forState: .Normal) 
} 

ответ

2

Это решение может работать для вас, добавьте iconBadgeNumber вычислен переменную UIApplication через расширение и установит реальную переменную и уведомить ваше приложение об изменениях

extension UIApplication 
{ 
    var iconBadgeNumber:Int { set{self.applicationIconBadgeNumber = iconBadgeNumber 
      NSNotificationCenter.defaultCenter().postNotificationName("BageNumberChanged", object: nil) 
     } get{return self.applicationIconBadgeNumber}} 
} 

//Add this at Observer 
NSNotificationCenter.defaultCenter().addObserver(self, selector: #Selector(Controller.Method), name: "BageNumberChanged", object: nil) 
0

enter image description here

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 


    UIApplication.sharedApplication().applicationIconBadgeNumber = 5 

    return true 
} 
override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(true) 

     let badgeCount: String = String(UIApplication.sharedApplication().applicationIconBadgeNumber) 

     let notificationsButton: UIButton = UIButton (type: UIButtonType.Custom) 

     notificationsButton.addTarget(self, action: "tapBarNotificationsButton", forControlEvents: UIControlEvents.TouchUpInside) 

     notificationsButton.frame = CGRectMake(0, 0, 25, 25) 

     notificationsButton.backgroundColor = UIColor.blackColor() 

     notificationsButton.setTitle(badgeCount, forState: .Normal) 

     let barnotificationsButton = UIBarButtonItem(customView: notificationsButton) 

     self.navigationItem.setRightBarButtonItem(barnotificationsButton, animated: true) 



    } 
Смежные вопросы