处理UI中的异步事件

时间:2014-02-18 11:05:41

标签: ios cocoa-touch

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

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

如果我处理某些后台服务对象中的事件(感觉正确),我仍然需要联系“当前活动控制器”并转发事件信息。但是iOS中没有“当前活动控制器”,即使有,控制器仍然需要指示它是否可以自由显示事件。再说一遍,看起来有很多错综复杂的角落需要处理。

简而言之,是否有一个模式或库来处理此类事件而不会将逻辑传播到整个应用程序?

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

1 个答案:

答案 0 :(得分: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;

希望这会有所帮助!