我有四个UIView
:viewA
是根视图,vhich具有viewB
作为其子视图。 viewB
将viewC
作为其子视图,而viewC
将viewD
作为其子视图。因此,存在四个视图的层次结构。 viewD
基本上是一个可以用来执行某些操作的按钮。由于该操作与数据库有关,因此可能需要一段时间。因此,我想要一个不透明的UIView
中间带有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
通知,并使为其观察者。但是,用于广播吗?因此,这是不合适的。
只要发生这种情况(在整个屏幕上都放置了黑色蒙版),我就可以使用与相关的内容来访问屏幕并将其直接放在屏幕上。但是,如果我只想出于其他目的将其放在屏幕的一部分上,那么它将无法正常工作。
因此,我想问一问是否有更好的方法或者上述一种方法是否是标准方法。
最佳答案
您可以使用选项3,即使它是广播节目,也只能由1个观察者收听。然后每个UIView都有不同的通知
我会说这是最简单/有保证的修复,即使它可能不够优雅,也没有错。