2014-02-18 152 views
0

现代移动应用程序可以接收来自应用程序外部的真正异步事件,例如推送通知。处理这些事件有点麻烦,因为事件到达时,应用程序可能无法立即处理。作为一个例子,如果已经显示一些弹出窗口或者如果UI正好在其他东西的中间,则显示弹出警报以响应推送通知可能是不可能的。你如何处理这些事件?在UI中处理异步事件

具体而言,用于处理异步事件的代码不能简单地放置在普通的UIViewController中,可以吗?屏幕上总是有不同的控制器,具体取决于用户在UI中的位置。虽然我可以在每个视图控制器中重复代码(或将其重构为共同的祖先),但感觉像是一种黑客。

如果我处理了某些后台服务对象中的事件(感觉不错),我仍然需要联系“当前主动控制器”并中继事件信息。但是在iOS中并没有像“当前主动控制器”那样的东西,即使存在,控制器仍然必须指出它是否可以自由显示事件。再一次,它看起来有很多错综复杂的角落案件需要处理。

总之,有没有一种模式或库来处理这样的事件,而不是逻辑传播到整个应用程序?

我知道这是一种主观的,但我认为这是一个简单而有建设性的答案。

回答

1

当事件出现时,您可以创建一个新的UIWindow,并管理其关键字以在其他对话框之后或之上显示对话框。通过这种方式,你不必照顾哪些UIViewController中你是...

UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
window.rootViewController = viewController; 
window.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
window.opaque = NO; 
window.windowLevel = UIWindowLevelCFShareCircle; 
window.backgroundColor = [UIColor clearColor]; 

[window makeKeyAndVisible]; 

然后你就可以管理在其他的UIViewController你的看法。删除窗口:

[window removeFromSuperview]; 
window = nil; 

希望这会有所帮助!