我如何找到最亲的SuperView?

时间:2014-04-09 18:42:49

标签: ios uiview uiviewcontroller superview

我正在尝试向页面添加新的子视图,这样除了自身之外的所有内容都会变灰。但是,我在屏幕的子视图中调用它。为了解决这个问题,我必须做到以下几点:

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

你可以猜测,这是非常糟糕的代码。如何找到正确的父级并正确设置?

2 个答案:

答案 0 :(得分:4)

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

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;
    }
}

答案 1 :(得分:0)

我曾经发现自己处于这种状况,我放弃了。我决定使用modalView代替交叉解析转换。您不仅可以避免遇到的问题,还可以帮助您保持井井有条。 最近我通过绘制parentVC的快照并将其发送到modalView来改进了这个方法,然后我应用了一个色调。我想,整体效果正是你所寻找的。