获取当前控制器

1.我们在非视图类中想要随时展示一个view时,需要将被展示的view加到当前view的子视图,或用当前view presentViewController,或pushViewContrller,这些操作都需要获取当前正在显示的ViewController。

[objc] view plain copy

  1. //获取当前屏幕显示的viewcontroller
  2. - (UIViewController *)getCurrentVC
  3. {
  4. UIViewController *result = nil;
  5. UIWindow * window = [[UIApplication sharedApplication] keyWindow];
  6. if (window.windowLevel != UIWindowLevelNormal)
  7. {
  8. NSArray *windows = [[UIApplication sharedApplication] windows];
  9. for(UIWindow * tmpWin in windows)
  10. {
  11. if (tmpWin.windowLevel == UIWindowLevelNormal)
  12. {
  13. window = tmpWin;
  14. break;
  15. }
  16. }
  17. }
  18. UIView *frontView = [[window subviews] objectAtIndex:0];
  19. id nextResponder = [frontView nextResponder];
  20. if ([nextResponder isKindOfClass:[UIViewController class]])
  21. result = nextResponder;
  22. else
  23. result = window.rootViewController;
  24. return result;
  25. }

2.获取当前屏幕中present出来的viewcontroller。

[objc] view plain copy

  1. - (UIViewController *)getPresentedViewController
  2. {
  3. UIViewController *appRootVC = [UIApplication sharedApplication].keyWindow.rootViewController;
  4. UIViewController *topVC = appRootVC;
  5. if (topVC.presentedViewController) {
  6. topVC = topVC.presentedViewController;
  7. }
  8. return topVC;
  9. }
 
时间: 2024-08-07 00:17:47

获取当前控制器的相关文章

MVC在页面View上获取当前控制器名称、Action名称以及路由参数

有时候在封装MVC通用控件时需要在页面上获取这些数据. 用以下方法即可: //获取控制器名称: ViewContext.RouteData.Values["controller"].ToString(); //获取Action名称: ViewContext.RouteData.Values["action"].ToString(); //获取路由参数值: ViewContext.RouteData.Values[名称].ToString(); //如:ViewCon

iOS:获取视图控制器实例的方法

获取视图控制器实例,可以使用其公开的成员变量的值,而不是重新开辟一块内存,与原先的实例并不只想一块内存区域 实例方法 - (RootViewController *)<span style="font-family: Arial, Helvetica, sans-serif;">rootViewController</span> { UIResponder *next = self.nextResponder; do { if ([next isKindOfCl

根据View获取该控制器

//根据View获取控制器 - (UIViewController*)viewController { for (UIView* next = [self superview]; next; next = next.superview) { UIResponder* nextResponder = [next nextResponder]; if ([nextResponder isKindOfClass:[UIViewController class]]) { return (UIViewCo

MVC过滤器 OnActionExecuting() 在过滤器中获取触发控制器,Action 等

<1> using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVC过滤器.Filters { //自定义一个过滤器 [MyActionFilter] public class MyActionFilterAttribute:ActionFilterAttribute { //重写OnActionExecuting方

MVC中获取来自控制器名称与动作的方法

#region 获取控制器名称与动作 protected void GetNameSpace() { var nameSpace = this.RouteData.Values["controller"] + "." + this.RouteData.Values["action"] + "."; ViewBag.NameSpace = nameSpace; } #endregion

MVC3在页面上获取当前控制器名称、Action名称以及路由参数

转自:http://ulfqbpl.blog.163.com/blog/static/87783552201272824843607/ 获取控制器名称: ViewContext.RouteData.Values["controller"].ToString(); 我试了应该这样写:RouteData.Values["controller"].ToString(); 获取Action名称: ViewContext.RouteData.Values["acti

获取当前控制器(如果是在tabbarController中也能正确的获得当前控制器,而不是tabbarController)

+ (UIViewController *)getCurrentVC { UIWindow * window = [[UIApplication sharedApplication] keyWindow]; if (window.windowLevel != UIWindowLevelNormal){ NSArray *windows = [[UIApplication sharedApplication] windows]; for(UIWindow * tmpWin in windows){

获取窗口当前显示的控制器

解决类似网易新闻客户端收到新闻推送后,弹出一个UIAlert,然后跳转到新闻详情页面这种需求 1.提供一个UIView的分类方法,这个方法通过响应者链条获取view所在的控制器 - (UIViewController *)parentController { UIResponder *responder = [self nextResponder]; while (responder) { if ([responder isKindOfClass:[UIViewController class]

获取当前视图所在控制器

在ios开发中经常在自定义组件或者xib文件中切换到其他视图,那么就需要当前控制器, - (UIViewController*)viewController { for (UIView* next = [self superview]; next; next = next.superview) { UIResponder* nextResponder = [next nextResponder]; if ([nextResponder isKindOfClass:[UINavigationCon