我有四个 UIView
:viewA
是 Root View ,它有 viewB
作为它的 subview 。 viewB
将 viewC
作为其 subview ,而 viewC
将 viewD
作为其 subview 。所以有四个 View 的层次结构。 viewD
基本上是一个可以点击以执行某些操作的按钮。由于操作与数据库有关,可能需要一段时间。所以我想要一个深色不透明的 UIView
,中间有一个 UIActivityIndicator
,告诉用户稍等片刻,并防止其他可能导致麻烦的点击操作。但是,必须将深色 View 放在 viewA
中以使其覆盖所有屏幕。这是我尝试过(并成功)的方法,但我想知道是否有更简单的方法来做到这一点。
通过
viewD.superview.superview.superview
从viewD
访问viewA
。但是它不是很灵活,因为一旦层次结构发生变化,这个链条很可能会发生变化。使用委派。
viewD.delegate = viewA
。但是,viewD
是由viewC
(它的直接父 View )创建的,viewB
是由viewA
创建的>。因此,如果viewD
、viewC
和viewB
不是其各自父类(super class)的@property
(通过访问viewA.viewB.viewC.viewD
是不可能的),那么viewA
不能有指向viewD
的指针,这将使委托(delegate)不可能(据我所知理解)。使用
NSNotification
。让viewD
发布一个@"ActivityIndicatorShouldBePutOn"
通知并让viewA
成为它的观察者。但是,NSNotification
是用来广播的吧?所以有点不合适。只要这种情况发生(黑色 mask 放在整个屏幕上),我就可以使用与
UIApplication
相关的东西来访问屏幕并将其直接放在屏幕上。但是,如果出于不同的目的,我只想将它放在屏幕的一部分上,那么这是行不通的。
所以我想问一下是否有更好的方法来做,或者上面提到的一种方法是否是标准方法。
最佳答案
您可以将事件指示器 View 添加到主窗口。您可以使用以下方法获取 keyWindow:
[[UIApplication sharedApplication] keyWindow];
关于iphone - 使 UIView 更改其 super View (或 super View 的 super View )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17927795/