Swift iOS哪个视图位于顶部

时间:2015-01-02 20:59:51

标签: ios swift uiviewcontroller

在我的应用程序中,我运行了一个后台任务,可以在发生某个事件时提醒用户。接下来会发生什么取决于当前哪个视图位于顶部。我怎么能确定这个?我想把一些指标写入一个plist文件,但这似乎有点笨拙,特别是如果有一种系统的方式。

3 个答案:

答案 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
}