推送跳转

最近在弄推送,现在推送能收到了,但是当点击推送过来的消息时,如何按照客户要求跳转到相依的view呢?
在AppDelegate里的“- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions”拖线跳转的话当然可以,但是这个方法只会在程序刚开始启动的时候才会调用一次。
当程序有后台进入前台的时候是不会调用这个方法的。收到通知后主要还是在AppDelegate里来完成view跳转的。如果在AppDelegate其他方法里直接拖线,用“performSegueWithIdentifier”的话会出现层次逻辑错误的报错。
屏幕快照 2014-11-06 下午9.15.32
这是storyBoard上的局部构架图。
view的入口是UITabBarController,比如客户要求收到通知后点击通知,跳转到“促销专区”,如何实现呢?
直接从UITabBarController拖线指向“促销专区”肯定不行,因为下面的tabBar不会跟着一起过去。而且更严重的是即使跳过来了也永远无法返回到主界面了,如果你再拉线回到主界面你只能正常回一次,第二回主界面会报错,至于为什么我也暂时没研究了。试了各种方法,现在来总结下代码跳转view的步骤。
第一步:
首先最重要的三句代码

1
2
3
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@ "Main" bundle:nil]; //TabBarController
UITabBarController *firstView = [storyboard instantiateViewControllerWithIdentifier:@ "TabBarController" ];
self.window.rootViewController = firstView;

第一句代码:storyboard是将你的Main.storyboard实例化,
然后在storyboard里把你的TabBarController的storyboard ID设置一下,我设置的是“TabBarController”
屏幕快照 2014-11-07 上午8.35.34
第二句代码:就是把storyboard中ID为“TabBarController”的UITabBarController变成名为“firstView”的对象。
第三句代码:把我们实例化的firstView设为我们的rootViewController,这三句是最主要的。
firstView是你即将跳转view的起点
收到通知后,后台处理通知的方法是“- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo”,当然,在“- (void)applicationWillEnterForeground:(UIApplication *)application”或者“- (void)applicationDidBecomeActive:(UIApplication *)application”这些程序由后台到前台会被调用的方法都可以插入。
第二步:
我的firstView下面有四个item,程序运行时默认进入最左边的那个item,
屏幕快照 2014-11-07 上午9.01.46
并且我把第一个item对应的view绑定到了一个名为“IndexViewController”的类,当上面的三句代码执行完后会自动进入到“IndexViewController”的UIViewController,这时我们只要在UIViewController中的“viewDidLoad”或者“viewDidAppear”之类的方法中加入我们要跳转的view就可以了。
屏幕快照 2014-11-07 上午9.08.42
这是storyboard中“汽配宝典”指向“促销专区”的segue
屏幕快照 2014-11-07 上午9.09.55
到这里就基本上完成了,至于在AppDelegate里通过哪个方法触发事件就看你放在哪个方法里了,不建议放在“applicationDidBecomeActive”,因为第一次运行会卡住,后台之后再前台久好了,建议放在“applicationWillEnterForeground”里。
现在收到推送来的通知之后,点击你的通知,程序开始由后台到前台,触发“applicationWillEnterForeground”里的三句代码,然后自动进入“IndexViewController”的UIViewController,接着在“viewDidLoad”中立即触发“[self performSegueWithIdentifier:@"index2promotion" sender:self];”,就跳转过去了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值