swift获取View所在ViewController的控制器对象

本文介绍了一种在 Swift 中通过响应者链获取 View 所在 ViewController 的方法。提供了详细的函数实现,包括一个 `viewController()` 函数,该函数遍历响应者链,直到找到 UIViewController 类型的对象并返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  /** swift方法   在 View 中实现这个方法即可

     *viewController () -> (UIViewController) 作用:根据调用这个方法的对象 获取他的控制器对象

     */

    func viewController () -> (UIViewController){

    

        /* 方法1.

            //1.通过响应者链关系,取得此视图的下一个响应者

            var next:UIResponder?

            next = self.nextResponder()!

            while next != nil {

                //2.判断响应者对象是否是视图控制器类型

                if ((next as?UIViewController) != nil) {

                    return (next as! UIViewController)

                    

                }else {

                    next = next?.nextResponder()

                }

            }

            

            return UIViewController()

        */

        

        //1.通过响应者链关系,取得此视图的下一个响应者

        var next:UIResponder?

        next = self.nextResponder()!

        repeat {

            //2.判断响应者对象是否是视图控制器类型

            if ((next as?UIViewController) != nil) {

                return (next as! UIViewController)


            }else {

                next = next?.nextResponder()

            }

            

        } while next != nil

        

        return UIViewController()

    }


/** OC中的方法   在 View 中实现这个方法即可 写一个类目(类别),在.h文件声明这个方法,在.m文件实现这个方法

     *

- (UIViewController *)viewController 作用:根据调用这个方法的对象  获取他的控制器对象

     */


- (UIViewController *)viewController {

    

    //通过响应者链关系,取得此视图的下一个响应者

    UIResponder *next = self.nextResponder;

    

    do {

        

        //判断响应者对象是否是视图控制器类型

        if ([next isKindOfClass:[UIViewController class]]) {

            return (UIViewController *)next;

        }

        

        next = next.nextResponder;

        

    }while(next != nil);

    

    

    return nil;

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值