欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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];

可以用来做强制更新,也可根据自己需要来做操作。