【转】如何使App从后台返回前台时,显示指定界面

用户操作App至任意界面,然后按home键切到后台,然后再从后台返回前台后,如何将App显示到指定界面?

对于这个需求,具体来说分2种情况:

  1. 指定界面是一种盖在整个App上的效果。例如:
    • 有道云笔记的密码保护功能。在启动密码保护后,每次从后台切到前台,应用会先显示密码输入界面,然后才能显示上次退出前的界面。
    • 支付宝客户端的手势解锁功能,每次从后台切到前台,需要输入手势解锁才能显示退出前的界面。

对于这个需求,我在有道云笔记开发这个功能时,是放了一个密码输入的subview在整个界面(UIWindow)的最下面,然后每次切到后台时,用 bringSubviewToFront 方法将这个界面提到最前面。后来我发现,这种做法其实不太通用,因为iPad会有多个UIWindow实例,所以该方法在iPad版上不太好做。所以更好的办法是用一个层级更高的UIWindow盖在上面。具体做法是实现一个UIWindow的子类,并将其
windowLevel成员变量设置成UIWindowLevelAlert。

  1. 指定界面是App的一个正常的界面。例如某个应用有4个Tab,需要用户从后台切回来时,不管在什么情况下都切换到显示第1个Tab的内容。

对于这个需求,可能在退出前,用户在其它tab界面又点了一些操作,push或modal到另外一些界面上,要把整个操作回退回来比较麻烦。

对此,腾讯的王飞提供了一个比较trick的办法,我没有试过,先写下来,感兴趣的可以一试。王飞的办法是:直接把appDelegate里面的 window 的 rootViewController 置 nil,让它自己去清理。有点需要注意的是,rootViewController 置空,并不会导致已经入栈的vc立即被释放,因为屏幕还在显示它呢,只有下次设置 rootVC 并 make Visiable 的时候,之前 VC 的 dealloc 才会执行。

今日消息

如果你有向大量用户push消息的需求,推荐使用亚马逊的云服务。有同行告诉我,因为服务器都在美国,使用亚马逊的云服务向苹果的APNS发送消息非常快,大概的速度是每秒可以push一万条消息。

posted @ 2015-08-25 21:50  WillkYang  阅读(1084)  评论(0编辑  收藏  举报