0

我正在尝试向页面添加一个新的 subView,这样除了本身之外的所有内容都是灰色的。但是,我从屏幕的子视图中调用它。为了把它弄出来,我必须做以下事情:

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

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

4

2 回答 2

6

如果视图是视图层次结构的一部分,请使用该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;
    }
}
于 2014-04-09T18:45:06.590 回答
0

我曾经发现自己处于这种情况,然后我放弃了。我决定使用 modalView 代替交叉溶解过渡。您不仅可以避免遇到的问题,还可以帮助您保持井井有条。最近我通过抓取 parentVC 的快照并将其发送到 modalView 来改进这种方法,然后我应用了一个 tint。我猜,整体效果正是您想要的。

于 2014-04-09T18:47:28.703 回答