小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
应用场景 :横屏电子签名、更新界面信息
例子: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 mark - 程序进入前台 切换应用至当前应用的收款信息界面,主动刷新一次收款信息
- (void)applicationDidBecomeActive:(UIApplication *)application {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
[JPUSHService setBadge:0];
//
[ QCTCollectionInformationViewController UpdateAppCollectionInfo];
}
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 currentVC;
}
III、see also
更多内容请关注#小程序:iOS逆向
,只为你呈现有价值的信息,专注于移动端技术研究领域。