Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.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
Ios 如何找到最父级的SuperView?_Ios_Uiview_Uiviewcontroller_Superview - Fatal编程技术网

Ios 如何找到最父级的SuperView?

Ios 如何找到最父级的SuperView?,ios,uiview,uiviewcontroller,superview,Ios,Uiview,Uiviewcontroller,Superview,我正在尝试向页面添加一个新的子视图,这样除了它本身以外的所有内容都会变灰。但是,我在屏幕的子视图中调用它。要想把它弄出来,我必须做以下几点: [self.view.superview.superview.superview.superview addSubview:self.cardDialog.view]; 正如您所猜测的,这是非常糟糕的代码。如何找到合适的父级并正确设置 如果视图是视图层次结构的一部分,请使用窗口属性 UIView* topView = self.view.window;

我正在尝试向页面添加一个新的子视图,这样除了它本身以外的所有内容都会变灰。但是,我在屏幕的子视图中调用它。要想把它弄出来,我必须做以下几点:

[self.view.superview.superview.superview.superview addSubview:self.cardDialog.view];

正如您所猜测的,这是非常糟糕的代码。如何找到合适的父级并正确设置

如果视图是视图层次结构的一部分,请使用
窗口
属性

UIView* topView = self.view.window;
或者,如果您的视图尚未显示在屏幕上,您可以通过应用程序代理间接获取窗口

UIView* topView = [UIApplication sharedApplication].delegate.window;
否则,如果目标不是窗口,则可以沿视图层次结构向上走,直到找到所需的视图:

UIView* topView = self.view;

while(topView.superview != nil){
    topview = topView.superview;

    if( /*topview is the one you were looking for*/ ){
        break;
    }
}

如果视图是视图层次结构的一部分,请使用
窗口
属性

UIView* topView = self.view.window;
或者,如果您的视图尚未显示在屏幕上,您可以通过应用程序代理间接获取窗口

UIView* topView = [UIApplication sharedApplication].delegate.window;
否则,如果目标不是窗口,则可以沿视图层次结构向上走,直到找到所需的视图:

UIView* topView = self.view;

while(topView.superview != nil){
    topview = topView.superview;

    if( /*topview is the one you were looking for*/ ){
        break;
    }
}

我发现自己有一次遇到这种情况,我放弃了。我决定用一个modalView来代替交叉分解转换。你不仅能避免你所遇到的问题,还能帮助你保持事情的条理性。
最近,我改进了这个方法,抓取了parentVC的快照并将其发送到modalView,然后应用了一个色调。我想,整体效果正是你所期待的。

我发现自己曾经陷入这种情况,我放弃了。我决定用一个modalView来代替交叉分解转换。你不仅能避免你所遇到的问题,还能帮助你保持事情的条理性。
最近,我改进了这个方法,抓取了parentVC的快照并将其发送到modalView,然后应用了一个色调。我想,整体效果正是您想要的。

您如何定义合适的家长?
窗口
?如何定义正确的父项?
窗口
?除非视图还没有出现在屏幕上,
self.view.window
也会做同样的事情。而且OP不太可能真的在寻找窗口。这个问题是一个很大的问题。@rmaddy是的,我以为窗户是尽头goal@Wain说得好。如果视图还不是视图的一部分,我添加了这个案例hierarchy@michaelsWain的观点是,你的
while
循环可以全部替换为一行-
self.view.window
。除非视图还没有出现在屏幕上,
self.view.window
做同样的事情。OP也不太可能真的在寻找窗口。这个问题是一个很大的问题。@rmaddy是的,我以为窗户是尽头goal@Wain说得好。如果视图还不是视图的一部分,我添加了这个案例hierarchy@michaelsWain的观点是,您的
while
循环可以全部替换为一行-
self.view.window