Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 是否从UI元素引用根视图?_Swift - Fatal编程技术网

Swift 是否从UI元素引用根视图?

Swift 是否从UI元素引用根视图?,swift,Swift,如果我有任何UI元素,在本例中是描述UIlabel 我知道这样做: description.superView 将引用DescriptionContainerView,但 是否可以引用根视图?从这些元素中 注意:我不想使用self.view,因为我想从另一个上下文引用它,其中self变量不是您所期望的您可以这样做(这不是好方法): 您可以这样添加递归函数: func getSuperView(mainView: Any) -> UIView? { if let view

如果我有任何
UI元素
,在本例中是描述UIlabel

我知道这样做:

description.superView
将引用DescriptionContainerView,但

是否可以引用根视图?从这些元素中


注意:我不想使用
self.view
,因为我想从另一个上下文引用它,其中self变量不是您所期望的

您可以这样做(这不是好方法):

您可以这样添加递归函数:

func getSuperView(mainView: Any) -> UIView? {
        if let view = mainView as? UIView, view.tag == 1001 {
            return view
        } else {
           return getSuperView(mainView: mainView)
        }
    }

您可以使用递归函数为UIView创建扩展,并检查当前superview是否不是UIWindow

extension UIView {
   func getRootSuperView() -> UIView {
        if let superview = self.superview, !(superview is UIWindow) {
            return superview.getRootSuperView()
        } else {
            return self
        }
    }
}

self.superView.superView….superView
,但不建议这样做。使用闭包或委托来允许按钮(或者更确切地说,它的所有者)告诉UIViewController执行某些操作,怎么样?这会起作用,但我想创建一个不知道嵌套了多少视图的二元函数。然后给目标视图(主视图)一个标记并调用递归函数直到没有得到tag@RenzoCalla:请检查我的更新答案,我添加了递归函数以获得超级视图
extension UIView {
   func getRootSuperView() -> UIView {
        if let superview = self.superview, !(superview is UIWindow) {
            return superview.getRootSuperView()
        } else {
            return self
        }
    }
}