首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取parentViewController实例

获取parentViewController实例
EN

Stack Overflow用户
提问于 2018-01-22 19:20:29
回答 3查看 3K关注 0票数 1

我有两个类:MyViewController: UIViewControllerTheView: UIView。在MyViewController中,我声明了var theView: TheView和一个布尔标志,比如var flag: Bool = false。如何在不从MyViewController传递if的情况下从TheView类内部获取flag值?我尝试过像if let vc = self.parentViewController as? MyViewController { }这样的方法,但没有成功。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-22 19:27:49

很难获得对视图的关联控制器的引用的事实应该是一个暗示,这是一个糟糕的实践。您最好将父视图控制器传递到视图的初始化器中,并将其存储为弱引用。

代码语言:javascript
复制
class TheView: UIView {
    weak var parentViewController: MyViewController?

    init(parentViewController: MyViewController) {
        self.parentViewController = parentViewController
    }
}

// in MyViewController...
let view = TheView(parentViewController: self)
票数 1
EN

Stack Overflow用户

发布于 2018-01-22 19:49:33

最好的方法是在TheView中声明一个引用父级的变量,并在实例化TheView时进行设置:

代码语言:javascript
复制
var parentController: MyViewController?

然后,在实例化theView时,可以附加父对象:

代码语言:javascript
复制
// Instantiate your view either view storyboard or code and then:
self.theView.parentController = self
票数 0
EN

Stack Overflow用户

发布于 2018-01-22 20:38:27

从视图中获取parentViewController,然后使用此扩展。

代码语言:javascript
复制
extension UIView {

    var parentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

得到一个像那样的UIView parentViewController

代码语言:javascript
复制
class TheView: UIView {
    func teset(){
        if let vc = self.parentViewController as? ViewController {
            //Sccess block
        }
    }
}

你的ParentViewController喜欢。

代码语言:javascript
复制
class ViewController: UITableViewController {

var theView: TheView = TheView()
override func viewDidLoad() {
    super.viewDidLoad()

    self.view.addSubview(theView)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48380401

复制
相关文章

相似问题

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