首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >给定一个视图,我如何获取它的viewController?

给定一个视图,我如何获取它的viewController?
EN

Stack Overflow用户
提问于 2009-09-03 11:55:35
回答 8查看 133K关注 0票数 158

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-09-03 12:12:34

是的,superview是包含您的视图的视图。你的视图不应该确切知道哪个是它的视图控制器,因为这会违反MVC原则。

另一方面,控制器知道它负责哪个视图(self.view = myView),通常,此视图将方法/事件委托给控制器处理。

通常,您应该有一个指向控制器的指针,而不是指向视图的指针,控制器可以执行某些控制逻辑,也可以将某些内容传递给视图。

票数 44
EN

Stack Overflow用户

发布于 2016-01-27 20:52:17

要获得具有UIView的UIViewController的引用,您可以扩展UIResponder (这是UIView和UIViewController的超类),它允许通过响应器链向上移动,从而到达UIViewController(否则返回nil)。

extension UIResponder {
    func getParentViewController() -> UIViewController? {
        if self.nextResponder() is UIViewController {
            return self.nextResponder() as? UIViewController
        } else {
            if self.nextResponder() != nil {
                return (self.nextResponder()!).getParentViewController()
            }
            else {return nil}
        }
    }
}

//Swift 3
extension UIResponder {
    func getParentViewController() -> UIViewController? {
        if self.next is UIViewController {
            return self.next as? UIViewController
        } else {
            if self.next != nil {
                return (self.next!).getParentViewController()
            }
            else {return nil}
        }
    }
}

let vc = UIViewController()
let view = UIView()
vc.view.addSubview(view)
view.getParentViewController() //provide reference to vc
票数 10
EN

Stack Overflow用户

发布于 2017-03-30 00:07:11

Swift 3中快速而通用的方式:

extension UIResponder {
    func parentController<T: UIViewController>(of type: T.Type) -> T? {
        guard let next = self.next else {
            return nil
        }
        return (next as? T) ?? next.parentController(of: T.self)
    }
}

//Use:
class MyView: UIView {
    ...
    let parentController = self.parentController(of: MyViewController.self)
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1372977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档