iOS开发-监听手机左上角系统自带的返回按钮
程序员文章站
2022-06-04 13:18:01
...
最早的时候,博主在做支付的时候牵涉到没支付成功,点击了系统左上角的自带返回按钮后支付失败的,微信无法拿到这个回调(不知道现在是否可以)。近日有小伙伴偶尔问题来这个问题,所以觉得有必要在这里公开一下这个方法,搜了下,网上关于这个方法内容很少,所以博主就发扬下极客精神:
PS:关于支付是否成功,当你的支付没有第三方的回调时,点击左上角返回按钮后,可以通过后台接口来查询是否支付成功。
1.使用一个方法
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
//这里做了一个延时,很有必要,否则_isLeftBack值不会改变
_isLeftBack = NO;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (!_isLeftBack) {
[[NSNotificationCenter defaultCenter]postNotificationName:@"leftBackPay" object:nil];
}
});
}
_isLeftBack在Appdelegate中,需要在几个方法中给赋值YES:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
_isLeftBack = YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
_isLeftBack = YES;
}
现在有很多拿回调URL的方法,都需要加上上面的赋值,自定义的就不需要了(比如说极光推送代理里面的)。
这样就可以了。这里强调下:
[[NSNotificationCenter defaultCenter]postNotificationName:@”leftBackPay” object:nil];
这个通知不用博主再讲解了吧,在需要的地方add一个你需要的通知即可在回到原界面的时候触发操作。
这里再说一个离开app后一切回来就会触发的操作:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endBackground) name:UIApplicationWillEnterForegroundNotification object:nil];
可以用来做强制更新,也可根据自己需要来做操作。
下一篇: 浅谈PHP与Java之Web开发整合技术