我有四个UIViewviewA是根视图,vhich具有viewB作为其子视图。 viewBviewC作为其子视图,而viewCviewD作为其子视图。因此,存在四个视图的层次结构。 viewD基本上是一个可以用来执行某些操作的按钮。由于该操作与数据库有关,因此可能需要一段时间。因此,我想要一个不透明的UIView中间带有UIActivityIndicator的黑色viewA来告诉用户稍等片刻,并防止其他可能引起麻烦的敲击动作。但是,必须在viewA中放入暗视图,以使其覆盖所有屏幕。这是我尝试(并成功)的方法,但我想知道是否有任何更简单的方法可以做到这一点。


通过viewDviewD.superview.superview.superview访问viewD.delegate = viewA。但是,它不是非常灵活,因为一旦更改了层次结构,此链就可能会更改。
使用委托。 viewD。但是,viewCviewB(其直接上级视图)创建,而viewAviewD创建,而viewCviewB创建。因此,如果@propertyviewA.viewB.viewC.viewDviewA不是其各自超类的viewD(无法通过NSNotification访问),则viewD不能具有指向@"ActivityIndicatorShouldBePutOn"的指针,这将使该代表团不可能(据我了解)。
使用viewA。使NSNotification发布UIApplication通知,并使为其观察者。但是,用于广播吗?因此,这是不合适的。
只要发生这种情况(在整个屏幕上都放置了黑色蒙版),我就可以使用与相关的内容来访问屏幕并将其直接放在屏幕上。但是,如果我只想出于其他目的将其放在屏幕的一部分上,那么它将无法正常工作。


因此,我想问一问是否有更好的方法或者上述一种方法是否是标准方法。

最佳答案

您可以使用选项3,即使它是广播节目,也只能由1个观察者收听。然后每个UIView都有不同的通知

我会说这是最简单/有保证的修复,即使它可能不够优雅,也没有错。

09-25 22:12