IOS Swift处理全球事件

时间:2015-06-03 11:07:28

标签: ios swift cocoa-touch events

如何处理通知中心触发的全局事件,例如在我的API类中,如果收到错误响应,则触发事件。 (500)。当该事件被触发时,应该在视图控制器处于活动状态时显示UIAlert,或者在注销时应显示登录视图控制器。

据我所知,没有简单的方法来获取当前的视图控制器以便与之交互。 (请注意,我的根视图控制器是 NOT 导航控制器)。

3 个答案:

答案 0 :(得分:1)

无论视图控制器是否嵌入UINavigationController,都可以使用另一种解决方案,即子类UIViewController。此类将处理接收发生错误的NSNotification,并且还将处理显示警报:

class MyViewController: UIViewController {
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        NSNotificationCenter.defaultCenter().addObserver(self,
                                             selector: "errorOccured",
                                             name: "ErrorNotification",
                                             object: nil)
    }

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        NSNotificationCenter.defaultCenter().removeObserver(self, name: "ErrorNotification", object: nil)
    }

    func errorOccured() {
        // Present an UIAlertViewController or the login screen.
    }
}

现在,在发布错误通知时应显示警报的任何UIViewController都必须是MyViewController的子类。如果您覆盖viewWillAppearviewWillDisappear,请确保拨打super.viewWillAppearsuper.viewWillDisappear

答案 1 :(得分:0)

这种方式难以获得当前的视图控制器(不使用导航控制器时)吗?

// on your app delegate    
getCurrentViewController(self.window!.rootViewController!)

func getCurrentViewController(viewController:UIViewController)-> UIViewController{

    if let navigationController = viewController as? UINavigationController{
       return getCurrentViewController(navigationController.visibleViewController)
    }

    if let viewController = viewController?.presentedViewController {

        return getCurrentViewController(viewController)

    }else{

        return viewController
    }
}

答案 2 :(得分:-1)

适用于BroadCast通知

NSNotificationCenter.defaultCenter().postNotificationName("erro400", object: nil)

接收

override func viewWillAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "ErroOccure", name: "erro400", object: nil)
}

func ErroOccure()
{
    //present alert from here
   // do whatever you want
}

完成后,您必须删除通知。

override func viewWillDisappear(animated: Bool) {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}