如何在不知道它是哪个视图的情况下将 UIView 添加为最顶层视图的子视图?

Posted

技术标签:

【中文标题】如何在不知道它是哪个视图的情况下将 UIView 添加为最顶层视图的子视图?【英文标题】:How do I add a UIView as a subview of the topmost view without knowing which view it is? 【发布时间】:2013-06-05 19:56:36 【问题描述】:

我要添加视图:

[aView addSubview:myNewView];

我要做的是找出在任何给定时刻显示的最顶层视图是什么视图,因此我可以在其顶部动态添加一个视图。例如,假设我的视图堆栈如下所示:

    模态相机视图(在所有内容之上,当前正在显示) 标签视图 导航视图 查看 表格视图

我想在 0 处的任何视图上动态放置一些东西。

有谁知道如何做到这一点,或者是否有可能?

【问题讨论】:

[self.view subviews] 返回一个 NSArray。您可以通过 [self.view subviewAtIndex:0]; 访问索引 0 处的视图 您的意思是笼统地讲,还是专门想在UIImagePickerController 的视图之上叠加一个视图? 【参考方案1】:

视图层次结构不是由堆栈表示,而是由树表示,因此没有the topmost view

如果您只想在所有其他视图之上添加一个视图,请将其添加到 UIWindow,就像在 this answer 中所做的那样:

UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
[mainWindow addSubview:myNewView];

如果你所说的视图真的是指视图控制器,那么我认为没有办法“遍历”当前堆栈,因为它取决于堆叠视图控制器的类,并且与视图层次结构的原因相同: 一个视图控制器可以有很多孩子——例如UITabBarController

【讨论】:

正是我需要的。谢谢。

以上是关于如何在不知道它是哪个视图的情况下将 UIView 添加为最顶层视图的子视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不损失视网膜显示质量的情况下将 UIView 捕获到 UIImage

如何在不丢失导航栏的情况下将子视图添加到 UINavigation 控制器?

如何在不使用助手编辑器的情况下将 IBOutlet 和 IBAction 连接到视图控制器

如何在不破坏滚动功能的情况下将 UIImage 添加到 UIScrollView?

在不先显示 UIView 的情况下将 UIView 转换为 UIImage?

如何在不使用 BIOS 的情况下将数据写入显卡?