美文网首页iOS开发iOS开发技术iOS Developer - Tips
iOS中如何根据UIView获取所在的UIViewControl

iOS中如何根据UIView获取所在的UIViewControl

作者: TianBai | 来源:发表于2016-05-30 22:55 被阅读4170次

    简述

    • 本文将讲述在iOS开发中如何根据某个UIView(前提是该UIView已经被加入到Controller中)来获取所属的UIViewController。

    UIResponder

    • 在UIKit中,UIApplication、UIView、UIViewController这几个类都是直接继承自UIResponder类。另外SpriteKit中的SKNode也是继承自UIResponder类。因此UIKit中的视图、控件、视图控制器,以及我们自定义的视图及视图控制器都有响应事件的能力。这些对象通常被称为响应对象,或者是响应者(以下我们统一使用响应者)。
    • 视图、视图控制器、窗口对象和app对象都能处理事件。另外需要注意的是,手势也会影响到事件的传递。
    • Responder Chain 大概的传递规则就是从视图顶层的UIView向下到UIViewController再到RootViewController再到Window最后到Application。

    实现

    • OC版本
    id responder = self.nextResponder;
    while (![responder isKindOfClass: [UIViewController class]] && ![responder isKindOfClass: [UIWindow class]])
         {
            responder = [responder nextResponder];
        }
        if ([responder isKindOfClass: [UIViewController class]])
        {
            // responder就是view所在的控制器
            // do something
        }
    
    • Swift版本
    func viewController(aClass: AnyClass) -> UIViewController?{
           for(var next=self.superview;(next != nil);next=next?.superview){
               let nextResponder = next?.nextResponder()
               if((nextResponder?.isKindOfClass(aClass)) != nil){
                   return nextResponder as? UIViewController
               }
           }
           return nil
       }
    
    

    相关文章

      网友评论

      • IMKel:写得很好
      • coolLee:现在就在用,还挺方便的
      • 清無:还不错,不过一般不会直接用,这会破坏MVC 的思想,需要干什么动作,应该代理到vc去实现。。。
        清無:停电了,没空调,睡不着
        TianBai:@菲拉兔 早睡早起(・ω< )★
      • 码代码的小马:以前看到过,很不错,加油
      • iOS_凯:mark
      • Hom_zhang:在view里去操作controller 这种代码我受不了。
        TianBai:@清蒸鱼跃龙门 view单独一个类
        清蒸鱼跃龙门:@TianBai 你的View里的所有按钮,既然都在当前控制器里了,把事件全部添加到同个方法里不就好了?还是说你的View单独是一个View类 不一定被哪个控制器调用?用代理的方式也很方便呀
        TianBai:@Hom_zhang 需求是这个view里面的所有按钮都是固定方法,就直接写了!多个界面集成而已!
      • 沈悦:好 非常好
      • jiangamh:这个方法早就见过,并不是万能的,好像很多情况要根据自己app自己得结构确定
        TianBai:@jiangamh 我觉得你是啊:grin:
        jiangamh:@TianBai 不是啊
        TianBai:@jiangamh 你开发安卓的吗?
      • 思想的零度:棒棒哒
      • 子达如何:这个思路好像挺不错
      • 7f4097b47ca3:好腻害哦

      本文标题:iOS中如何根据UIView获取所在的UIViewControl

      本文链接:https://www.haomeiwen.com/subject/aojcdttx.html