在view中实现UIViewController的跳转 By H.L
2024-10-12 14:49:53
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];
}
最新文章
- Dev TreeList 总结
- SearchLookUpEdit
- Log4net使用(一)
- C++的STL中vector内存分配方法的简单探索
- WPF 文本框添加水印效果
- 转码:unescape(";%u7B80%u4F53%u4E2D%u6587";)--->;escape(";简体中文";)
- Linux学习笔记21——线程同步的两种方式
- Redis 排行榜 自己简单练习
- Idea debug时报错:Command line is too long
- laravel 中with关联查询限定查询字段
- sqlserver 查看当前连接数
- PHP通用返回值设置
- Jsp重定向(response.sendRedirect())和转发(request.getRequestDispatcher().forward(request,r)的差别
- Spring batch的学习
- 643. Maximum Average Subarray I
- VisualStudio神级插件Resharper的基本配置和使用技巧大全+Resharper性能优化
- 将Tp-link无线路由器桥接到Dlink无线路由器上
- img标签-srcset属性
- platform_device和platform_driver的注册过程,及probe函数何时调用的分析 ⭐⭐⭐
- 关于Java中的线程安全(线程同步)
热门文章
- 基于Spring MVC + Spring + MyBatis的【人事管理系统】
- Spring企业级程序设计 • 【目录】
- layedit赋值方法(layedit.setContent赋值时报错-ReferenceError: layedit is not defined)
- 「艺蜂酒店管理系统」 · Java Swing + mysql 开发 学生毕业设计项目
- centos6.5-搭建Apache-地址限制和用户访问
- oracle 之 for循环表
- spring boot 热部署 实现 前端部分热更新 详细操作
- vue中computed的作用以及用法
- Flowable实战(二)集成Springboot
- 系统信号SIGHUP、SIGQUIT、SIGTERM、SIGINT的场景