获取当前控制器,封装方法可直接调用
2018-03-23 16:35
549 查看
实际开发中,经常会遇到弹窗,在弹窗中有点击事件,然后跳转到指定页面。比如当前页面,点击上架,会显示弹窗显示当前上架总数,并且右边按钮可以跳转到店铺页面。那么问题来了。通常情况下这种弹窗都是一个view加在当前keywindow上。先来看一下弹窗的源码,在访问请求成功的情况下,将我们分装好的putawayview放到key window上if ([dic[kFlag] isEqualToString:@"1"]) {
[SSGOTools showInfoPopHint:@"上架成功"];
PutAwayView * view = [[PutAwayView alloc]initWithFrame:CGRectMake(0,kScreenHeight -91 -X_HOME_INDICATOR_HEIGHT, kScreenWidth , 91 )];
[view updateViewWithBean:dic[kMsg]];
__weak PutAwayView * weakView = view;
weakView.shopblock = ^(NSInteger tag) {
if (tag == 102) {
ShopListVC *vc = [ShopListVC new];
[[SSGOTools getCurrentViewController].navigationController pushViewController:vc animated:YES];
}
};
UIWindow *window = [[UIApplication sharedApplication]keyWindow];
[window addSubview:view];
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC));
dispatch_after(delayTime, dispatch_get_main_queue(), ^{
[view removeFromSuperview];
});
}通过view的block回调,我们推出一个新的页面。到店铺页面。那么如何获得当前的window背后显示的控制器呢?这里需要一个方法,已经封装成类方法,拿来直接用即可,代码如下:+(UIViewController *)getCurrentViewController
{
return [SSGOTools topViewControllerWithRootViewController:[[UIApplication sharedApplication].keyWindow rootViewController]];
}
+ (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController
{
if ([rootViewController isKindOfClass:[RDVTabBarController class]]) {
RDVTabBarController *tabBarController = (RDVTabBarController *)rootViewController;
return [SSGOTools topViewControllerWithRootViewController:tabBarController.selectedViewController];
} else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController* navigationController = (UINavigationController*)rootViewController;
return [SSGOTools topViewControllerWithRootViewController:navigationController.visibleViewController];
}
4000
else if (rootViewController.presentedViewController) {
UIViewController* presentedViewController = rootViewController.presentedViewController;
return [SSGOTools topViewControllerWithRootViewController:presentedViewController];
} else if ( [rootViewController isKindOfClass:[UIPageViewController class]]){
UIPageViewController * pageViewController = (UIPageViewController*)rootViewController;
return pageViewController.viewControllers[0];
}else {
return rootViewController;
}
}
相关文章推荐
- thinkphp A()、R()方法不能跨项目调用与当前action名称相同的控制器的原因
- 封装顶部选择按钮(使用block可以在当前控制器下面添加方法)
- C#获取时间戳的封装方法函数+使用获取当前时间时间戳
- 获取当前视图所在控制器的方法
- yii2.0如何获取当前的控制器名与方法名
- jni中调用java方法获取当前apk的签名文件md5值
- 【微信开发】-HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地
- 封装顶部选择按钮(用block实现在当前控制器下面添加button点击方法)
- Android 【身份证校验方法】已封装 可以直接调用 可用
- MVC 在action方法中获取当前action的控制器名和action名
- node+ejs【封装ejs模板中直接调用js方法】
- ci获取当前url链接的分组,控制器,方法
- iOS获取当前屏幕控制器的方法
- 封装好的Android对话框Dialog,包含了丰富的dialog样式、点击事件数据回传接口。直接调用封装好的方法即可操作dialog
- ci获取当前控制器类名和方法名和PHP获取当前类名、函数名、方法名方法
- iOS如何获取当前View所在控制器的方法
- java获取当前方法被调用的过程栈
- 关于获取调用当前方法的方法名的问题。
- YII2调用当前控制器方法
- C#如何获取调用当前方法的方法名