0
点赞
收藏
分享

微信扫一扫

iOS小技能: 获取当前正在显示的控制器

夏侯居坤叶叔尘 2022-08-31 阅读 126


前言

应用场景 :横屏电子签名、更新界面信息

例子:iOS 程序进入前台 (即切换应用至当前应用的时候)主动刷新一次收款信息

I、应用案例

1.1 横屏电子签名

  • ​​传递子控制器的屏幕旋转属性代码:​​

iOS小技能: 获取当前正在显示的控制器_ios

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

iOS小技能: 获取当前正在显示的控制器_电子签名_02

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逆向​​,只为你呈现有价值的信息,专注于移动端技术研究领域。

举报

相关推荐

0 条评论