在我的应用程序中,我运行了一个后台任务,可以在发生某个事件时提醒用户。接下来会发生什么取决于当前哪个视图位于顶部。我怎么能确定这个?我想把一些指标写入一个plist文件,但这似乎有点笨拙,特别是如果有一种系统的方式。
答案 0 :(得分:0)
这是如何在目标c中完成的
if([self.navigationController.topViewController isKindOfClass:[MYController Class]])
//then do something
我确信你可以轻松地找到快速版本
答案 1 :(得分:0)
我可以想到两种可能的方式:
首先,您可以使用NSUserDefaults
设置Bool或String指标。假设您正在使用Swift,请尝试:
NSUserDefaults.standardUserDefaults().setObject("FirstViewOnTop", forKey:"WhatViewIsOnTop?")
NSUserDefaults.standardUserDefaults().synchronize()
如果要检索该值,请使用:
let indicatorString = NSUserDefaults.standardUserDefaults().objectForKey("WhatViewIsOnTop?")
您可以使用if / else语句。
但是我要这样做的方法是继承UIView
并添加z
属性并将其添加到init()。然后你可以更优雅地访问它。
答案 2 :(得分:0)
这听起来像是使用NSNotificationCenter
的绝佳机会。让后台任务发布视图控制器将侦听的通知。当活动的viewController获取通知时,它可以以适合该viewController的方式处理它。
由于您的任务在后台运行,因此从主队列发送通知:
dispatch_async(dispatch_get_main_queue()) {
NSNotificationCenter.defaultCenter().postNotificationName("SomethingWonderfulHappened", object: nil)
}
接收通知:对于可能想要对通知采取行动的每个viewController,覆盖viewDidAppear
以开始侦听通知,并覆盖viewDidDisappear
以停止侦听通知:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleNotification:", name:"SomethingWonderfulHappened", object: nil)
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self)
}
通知处理程序:为每个viewControllers实现其中一个。让每个人都做适合该viewController的事情。
func handleNotification(notification: NSNotification) {
//Action to take when SomethingWonderfulHappened
}