【转】如何使App从后台返回前台时,显⽰指定界⾯
⽤户操作App⾄任意界⾯,然后按home键切到后台,然后再从后台返回前台后,如何将App显⽰到指定界⾯?
对于这个需求,具体来说分2种情况:
1. 指定界⾯是⼀种盖在整个App上的效果。例如:
有道云笔记的密码保护功能。在启动密码保护后,每次从后台切到前台,应⽤会先显⽰密码输⼊界⾯,然后才能显⽰上次退出前的界⾯。
⽀付宝客户端的⼿势解锁功能,每次从后台切到前台,需要输⼊⼿势解锁才能显⽰退出前的界⾯。
对于这个需求,我在有道云笔记开发这个功能时,是放了⼀个密码输⼊的subview在整个界⾯(UIWindow)的最下⾯,然后每次切到后台时,⽤ bringSubviewToFront ⽅法将这个界⾯提到最前⾯。后来我发现,这种做法其实不太通⽤,因为iPad会有多个UIWindow实例,所以该⽅法在iPad版上不太好做。所以更好的办法是⽤⼀个层级更⾼的UIWindow盖在上⾯。具体做法是实现⼀个UIWindow的⼦类,并将其windowLevel成员变量设置成UIWindowLevelAlert。
2. 指定界⾯是App的⼀个正常的界⾯。例如某个应⽤有4个Tab,需要⽤户从后台切回来时,不管在什么情况下都切换到显⽰第1个Tab
的内容。
对于这个需求,可能在退出前,⽤户在其它tab界⾯⼜点了⼀些操作,push或modal到另外⼀些界⾯上,要把整个操作回退回来⽐较⿇烦。
对此,腾讯的王飞提供了⼀个⽐较trick的办法,我没有试过,先写下来,感兴趣的可以⼀试。王飞的办法是:直接把appDelegate⾥⾯的window 的 rootViewController 置 nil,让它⾃⼰去清理。有点需要注意的是,rootViewController 置空,并不会导致已经⼊栈的vc⽴即被释放,因为屏幕还在显⽰它呢,只有下次设置 rootVC 并 make Visiable 的时候,之前 VC 的 dealloc 才会执⾏。
今⽇消息app登录界面
如果你有向⼤量⽤户push消息的需求,推荐使⽤亚马逊的云服务。有同⾏告诉我,因为服务器都在美国,使⽤亚马逊的云服务向苹果的APNS发送消息⾮常快,⼤概的速度是每秒可以push⼀万条消息。