gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:36:30 27 4
gpt4 key购买 nike

我有四个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com