前言
应用场景 :横屏电子签名、更新界面信息
例子:iOS 程序进入前台 (即切换应用至当前应用的时候)主动刷新一次收款信息
I、应用案例
1.1 横屏电子签名
- 传递子控制器的屏幕旋转属性代码:
1.2 更新界面信息(请求接口,更新模型数据)
UpdateAppCollectionInfo
/**
2、切换应用至当前app的时候,收款信息界面,主动刷新一次
*/
+ (void)UpdateAppCollectionInfo{
UIViewController *rootViewController =UIApplication.sharedApplication.delegate.window.rootViewController;
//NSStringFromClass
if(![NSStringFromClass(rootViewController.class) isEqualToString:@"HWTabBarController"] ){
// if(![rootViewController isKindOfClass:HWTabBarController.class] ){
return ;
}
HWTabBarController *tmpTabVC = rootViewController;
UIViewController *tmpTabVCselectedViewController = tmpTabVC.selectedViewController;
if(![tmpTabVCselectedViewController isKindOfClass:HWNavigationController.class] ){
return ;
}
HWNavigationController *nav = tmpTabVCselectedViewController;
if(![ @"QCTCollectionInformationViewController" isEqualToString: NSStringFromClass(nav.visibleViewController.class)]){
return;
}
// 更新数据
[nav.visibleViewController performSelector:@selector(setupAppCollectionInfo)];
}
II、知识储备
- 程序进入前台:applicationDidBecomeActive
- 导航栏正在显示的子控制器:nav.visibleViewController
- TabVC 选中的控制器:selectedViewController
2.1 监听程序进入前台
程序进入前台:applicationDidBecomeActive
#pragma
- (void)applicationDidBecomeActive:(UIApplication *)application {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
[JPUSHService setBadge:0];
//
2.2 从UIStoryboard获取VC
- 通过方法
instantiateInitialViewController
初始化storyboard的ViewController - 根据instantiateViewControllerWithIdentifier 从从UIStoryboard获取VC对象
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"SKUViewController" bundle:nil];
SKUViewController *VC = [mainStoryboard instantiateViewControllerWithIdentifier:@"SKUViewController"];
2.3 获取当前VC
getCurrentVC
// 获取当前VC
+ (UIViewController *)getCurrentVC
{
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
UIViewController *currentVC = [self getCurrentVCFrom:rootViewController];
return currentVC;
}
+ (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC
{
UIViewController *currentVC;
if ([rootVC presentedViewController]) {
// 视图是被presented出来的
rootVC = [rootVC presentedViewController];
}
if ([rootVC isKindOfClass:[UITabBarController class]]) {
// 根视图为UITabBarController
currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]];
} else if ([rootVC isKindOfClass:[UINavigationController class]]){
// 根视图为UINavigationController
currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]];
} else {
// 根视图为非导航类
currentVC = rootVC;
}
return
III、see also
更多内容请关注#小程序:iOS逆向
,只为你呈现有价值的信息,专注于移动端技术研究领域。