iOS开发-监听手机左上角系统自带的返回按钮

最早的时候,博主在做支付的时候牵涉到没支付成功,点击了系统左上角的自带返回按钮后支付失败的,微信无法拿到这个回调(不知道现在是否可以)。近日有小伙伴偶尔问题来这个问题,所以觉得有必要在这里公开一下这个方法,搜了下,网上关于这个方法内容很少,所以博主就发扬下极客精神:
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];

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

猜你喜欢

转载自blog.csdn.net/codingfire/article/details/80192842