给定一个视图,如何获取它对应的视图控制器?

168

我有一个指向UIView的指针。如何访问它的UIViewController[self superview]是另一个UIView,但不是UIViewController,对吗?


我认为这个线程有答案:如何在iPhone上从UIView获取到UIViewController? - Ushox
基本上,我正在尝试在我的视图被解除显示时调用我的viewController的viewWillAppear。视图是由视图本身解除显示的,它检测到一个轻拍并调用[self removeFromSuperview]。viewController并没有自己调用viewWillAppear / viewWillDisappear / viewDidAppear / viewDidDisappear。 - mahboudz
我的意思是当视图被解除时,我正在尝试调用viewWillDisappear。 - mahboudz
1
可能是重复的问题:如何从 UIView 获取 UIViewController? - Efren
12个回答

0
有点晚了,但这里有一个扩展可以让你找到任何类型的响应者,包括ViewController。
extension NSObject{
func findNext(type: AnyClass) -> Any{
    var resp = self as! UIResponder

    while !resp.isKind(of: type.self) && resp.next != nil
    {
        resp = resp.next!
    }

    return resp
  }                       
}

-1
如果您设置了断点,可以将以下内容粘贴到调试器中以打印视图层次结构:
po [[UIWindow keyWindow] recursiveDescription]

你应该能够在那个混乱的代码中找到你的视图的父级 :)


recursiveDescription 只打印 视图 层次结构,而不是视图控制器。 - Alan Zeino
1
从那里您可以识别出视图控制器 @AlanZeino。 - Akshay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接