iphone - 使 UIView 更改其 super View (或 super View 的 super View )?

标签 iphone ios objective-c

我有四个 UIView:viewA 是 Root View ,它有 viewB 作为它的 subview 。 viewBviewC 作为其 subview ,而 viewCviewD 作为其 subview 。所以有四个 View 的层次结构。 viewD 基本上是一个可以点击以执行某些操作的按钮。由于操作与数据库有关,可能需要一段时间。所以我想要一个深色不透明的 UIView,中间有一个 UIActivityIndi​​cator,告诉用户稍等片刻,并防止其他可能导致麻烦的点击操作。但是,必须将深色 View 放在 viewA 中以使其覆盖所有屏幕。这是我尝试过(并成功)的方法,但我想知道是否有更简单的方法来做到这一点。

  1. 通过 viewD.superview.superview.superviewviewD 访问 viewA。但是它不是很灵活,因为一旦层次结构发生变化,这个链条很可能会发生变化。

  2. 使用委派。 viewD.delegate = viewA。但是,viewD 是由 viewC(它的直接父 View )创建的,viewB 是由 viewA 创建的>。因此,如果 viewDviewCviewB 不是其各自父类(super class)的 @property(通过 访问viewA.viewB.viewC.viewD 是不可能的),那么 viewA 不能有指向 viewD 的指针,这将使委托(delegate)不可能(据我所知理解)。

  3. 使用NSNotification。让 viewD 发布一个 @"ActivityIndi​​catorShouldBePutOn" 通知并让 viewA 成为它的观察者。但是,NSNotification 是用来广播的吧?所以有点不合适。

  4. 只要这种情况发生(黑色 mask 放在整个屏幕上),我就可以使用与 UIApplication 相关的东西来访问屏幕并将其直接放在屏幕上。但是,如果出于不同的目的,我只想将它放在屏幕的一部分上,那么这是行不通的。

所以我想问一下是否有更好的方法来做,或者上面提到的一种方法是否是标准方法。

最佳答案

您可以将事件指示器 View 添加到主窗口。您可以使用以下方法获取 keyWindow:

[[UIApplication sharedApplication] keyWindow];

关于iphone - 使 UIView 更改其 super View (或 super View 的 super View )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17927795/

相关文章:

iphone - 如何检查用户是否清除了iPhone后台应用程序的运行状态?

ios - swift 4 : No such module 'CoreServices.DictionaryServices'

ios - 我可以在 Collection View 中的后续单元格之间添加延迟并为每个单元格设置动画吗

ios - 我如何为在 xcode 中开发的 iPhone 应用程序制作自定义应用内相机?

ios - 是否有更准确的方法来使用 Sphero API 检测球与球之间的碰撞?

iphone - 将 NSManagedObject 存储在字典中 (NSDictionary)

ios - 保存 ViewController 的实例

iphone - iOS 中的两指滑动与一指拖动

c++ - 头文件之谜

ios - 访问/获取已存在的 UIViewController 的引用(模拟后退按钮)