我有四个UIView
s:viewA
是根视图,它有viewB
它的子视图。viewB
hasviewC
作为其子视图,并且viewC
hasviewD
作为其子视图。所以有四个视图的层次结构。viewD
基本上是一个可以点击做某事的按钮。由于该操作与数据库有关,因此可能需要一段时间。UIView
所以我想要一个中间有a的深色不透明UIActivityIndicator
来告诉用户等待片刻并防止其他可能导致麻烦的点击动作。但是,必须放入暗视图viewA
以使其覆盖整个屏幕。这是我尝试(并成功)的方法,但我想知道是否有更简单的方法可以做到这一点。
viewA
从访问。viewD
_viewD.superview.superview.superview
但是它不是很灵活,因为一旦层次结构发生变化,这条链很可能会发生变化。使用委托。
viewD.delegate = viewA
. 但是,viewD
由viewC
(其直接超级视图)创建,由 创建viewB
,由 创建viewA
。因此,如果viewD
、viewC
和viewB
不@property
属于其各自的超类(无法访问viewA.viewB.viewC.viewD
),则viewA
不能有指向 的指针viewD
,这将使委托变得不可能(据我所知)。使用
NSNotification
.viewD
发布@"ActivityIndicatorShouldBePutOn"
通知并viewA
对其进行观察。但是,NSNotification
是用来广播的吧?所以有点不合适。只要这种情况下(黑色蒙版放在整个屏幕上),我就可以使用相关的东西
UIApplication
来访问屏幕并将其直接放在它上面。但是,如果我只想将它放在屏幕的一部分上以用于不同的目的,那么这是行不通的。
所以我想问一下是否有更好的方法,或者上面提到的一种方法是否是标准方法。