zoukankan      html  css  js  c++  java
  • 在view中实现UIViewController的跳转 By H.L

    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];
    }
  • 相关阅读:
    最通俗易懂的技术解读
    laya学习查漏补缺
    vue+webpack实现懒加载的三种方式
    web安全防范策略
    http/1.x、http/2与https的区别、以及http3
    设备检测
    移动端调试利器------微信开源项目
    SqlConnection 在linux 连接 mssql 挂起的问题。
    rabbitmq 启用日志跟踪
    使用脚本把.net core 程序部署到 docker 容器中
  • 原文地址:https://www.cnblogs.com/sixindev/p/4856879.html
Copyright © 2011-2022 走看看