我正在尝试向页面添加一个新的 subView,这样除了本身之外的所有内容都是灰色的。但是,我从屏幕的子视图中调用它。为了把它弄出来,我必须做以下事情:
[self.view.superview.superview.superview.superview addSubview:self.cardDialog.view];
您可以推测,这是非常糟糕的代码。如何找到正确的父级别并正确设置?
我正在尝试向页面添加一个新的 subView,这样除了本身之外的所有内容都是灰色的。但是,我从屏幕的子视图中调用它。为了把它弄出来,我必须做以下事情:
[self.view.superview.superview.superview.superview addSubview:self.cardDialog.view];
您可以推测,这是非常糟糕的代码。如何找到正确的父级别并正确设置?
如果视图是视图层次结构的一部分,请使用该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;
}
}
我曾经发现自己处于这种情况,然后我放弃了。我决定使用 modalView 代替交叉溶解过渡。您不仅可以避免遇到的问题,还可以帮助您保持井井有条。最近我通过抓取 parentVC 的快照并将其发送到 modalView 来改进这种方法,然后我应用了一个 tint。我猜,整体效果正是您想要的。