在swift3中从AppDelegate调用函数

时间:2017-04-21 21:23:23

标签: ios swift appdelegate onesignal

我使用OneSignal来处理我的应用中的通知。这是在AppDelegate.swift中启动的,其中有一个处理收到的应用的函数:

let notificationReceivedBlock: OSHandleNotificationReceivedBlock = { notification in
    print("Received Notification: \(notification!.payload.body)")
}

然后我有一个带有5个标签的TabViewController,每个标签的navigationItem都有一个UINavigationBarButton,可以将您转到消息视图。每当有通知进入时,我想更改该按钮中的徽章编号,以显示用户正在收到新消息。我在每个viewController(每个5个选项卡)中都有一个函数来更新它。

问题是AppDelegate需要调用此函数updateBadgeNumber而我不知道如何执行此操作。此外,有些标签甚至可能尚未初始化。有谁知道如何从AppDelegate

调用ViewControllers中的函数

谢谢。

编辑:

感谢下面的@paulvs找到了解决方案。他把我与答案联系起来,我找到了这个答案:Find Top View Controller in Swift

1 个答案:

答案 0 :(得分:1)

答案取决于您的drawBuffers([NONE, NONE, NONE, COLOR_ATTACHMENT3])是否是您应用的根视图控制器。

  1. 如果您的UITabBarController是根视图控制器,您可能会在应用代理中引用它,并可以使用UITabBarController的{​​{1}}属性来获取当前值查看控制器,然后设置徽章值。 (如果您没有引用,可以将UITabBarController强制转换为selectedViewController来访问它。)
  2. 如果不是,您可以使用代码like this查找当前可见的视图控制器。 (然后,要访问window.rootViewController,您可以将UITabBarController投射到UITabBarController,然后从那里访问其他视图控制器并设置其徽章值。)