view中是不能进行UIViewController的push,pop等操作的,若进行跳转操作,一般是用代理,block,通知等实现,那如何实现在ViewController的subView中实现跳转操作呢,其实只要获取该view所在的ViewController即可。

获取view所在UIViewController

UIView+UIViewController.h

#import <UIKit/UIKit.h>

@interface UIView (UIViewController)

- (UIViewController *)viewController;

@end

UIView+UIViewController.m

#import "UIView+UIViewController.h"

@implementation UIView (UIViewController)

- (UIViewController *)viewController {

    //通过响应者链,获得view所在的视图控制器
UIResponder *next = self.nextResponder;
do {
//判断响应者对象是否是视图控制器类型
if ([next isKindOfClass:[UIViewController class]]) {
return (UIViewController *)next;
}
next = next.nextResponder;
}while(next != nil); return nil;
} @end

or

- (UIViewController *)viewController {
// Traverse responder chain. Return first found view controller, which will be the view's view controller.
UIResponder *responder = self;
while ((responder = [responder nextResponder]))
if ([responder isKindOfClass: [UIViewController class]])
return (UIViewController *)responder; return nil;
}
- (UIViewController*)viewController {
for (UIView* next = [self superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
return (UIViewController*)nextResponder;
}
}
return nil;
}

其它 iOS 获取当前正在显示的ViewController 

  

使用:

在subview中导入  #import "UIView+UIViewController.h"

-(void)viewDidSelect
{
WebViewController *vc = [[WebViewController alloc] init];
vc.webUrl =@"http://www.baidu.com"; //如果VC 是添加在Nav 上的 用
[self.viewController.navigationController pushViewController:ViewController animated:YES]; //else 如果没有添加用
[self presentModalViewController: ViewController animated:YES];
}

最新文章

  1. Dev TreeList 总结
  2. SearchLookUpEdit
  3. Log4net使用(一)
  4. C++的STL中vector内存分配方法的简单探索
  5. WPF 文本框添加水印效果
  6. 转码:unescape(&quot;%u7B80%u4F53%u4E2D%u6587&quot;)---&gt;escape(&quot;简体中文&quot;)
  7. Linux学习笔记21——线程同步的两种方式
  8. Redis 排行榜 自己简单练习
  9. Idea debug时报错:Command line is too long
  10. laravel 中with关联查询限定查询字段
  11. sqlserver 查看当前连接数
  12. PHP通用返回值设置
  13. Jsp重定向(response.sendRedirect())和转发(request.getRequestDispatcher().forward(request,r)的差别
  14. Spring batch的学习
  15. 643. Maximum Average Subarray I
  16. VisualStudio神级插件Resharper的基本配置和使用技巧大全+Resharper性能优化
  17. 将Tp-link无线路由器桥接到Dlink无线路由器上
  18. img标签-srcset属性
  19. platform_device和platform_driver的注册过程,及probe函数何时调用的分析 ⭐⭐⭐
  20. 关于Java中的线程安全(线程同步)

热门文章

  1. 基于Spring MVC + Spring + MyBatis的【人事管理系统】
  2. Spring企业级程序设计 • 【目录】
  3. layedit赋值方法(layedit.setContent赋值时报错-ReferenceError: layedit is not defined)
  4. 「艺蜂酒店管理系统」 · Java Swing + mysql 开发 学生毕业设计项目
  5. centos6.5-搭建Apache-地址限制和用户访问
  6. oracle 之 for循环表
  7. spring boot 热部署 实现 前端部分热更新 详细操作
  8. vue中computed的作用以及用法
  9. Flowable实战(二)集成Springboot
  10. 系统信号SIGHUP、SIGQUIT、SIGTERM、SIGINT的场景