我正在创建一个可重用的框架,用于在iOS应用程序中显示通知.我希望将通知视图添加到应用程序中其他所有内容之上,有点像UIAlertView.当我初始化监听NSNotification事件并添加响应视图的管理器时,我需要获取对应用程序中最顶层视图的引用.以下是我目前的资料:

_topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];

这对任何iOS应用程序都有效吗?或者他们的应用程序是获得顶视图的更安全/更好的方式吗?

推荐答案

通常情况下,这将为您提供俯视图,但不能保证它对用户是可见的.例如,它可以不在屏幕上,具有0.0的Alpha,或者可以具有0x0的大小.

也可能是keyWindow没有子视图,所以您可能应该先测试一下.这很不寻常,但也不是不可能.

UIWindow是UIView的一个子类,所以如果您想确保您的通知对用户可见,您可以使用addSubview:将其直接添加到keyWindow中,它将立即成为最顶层的视图.不过,我不确定这是不是你想要做的事.(根据您的问题,您似乎已经知道了这一点.)

Ios相关问答推荐

崩溃到初始化react -带网页的原生iOS应用程序

连接一些字符串,每个字符串都应该可以在swiftUI中单独点击

SwiftUI文本编辑器内部滚动填充,无需文本裁剪

SwiftUI拖动手势和内容拖动时的奇怪行为( skip /卡顿)

如何使视图完全适合屏幕,而不会在旋转时溢出手机屏幕的边界?

滚动时突出显示工具栏项目

如何结合`@dynamicMemberLookup`和`ExpressibleByStringInterpolation`来实现方法链?

Swift中是否有一种方法可以为可选属性创建一个计算(computed)属性

Apple Metal iOS 为什么 GLKMatrix4MakeLookAt 来回摇摆

将值传递给导航链接视图中的文本框

如何将单个按钮传递到自定义 ConfirmationDialog

通过 tuist/XcodeProj 以编程方式将文件添加到本机目标

禁用 UITextField 的自动更正

为什么 Safari 在使用 iOS 6 设备进行远程调试时显示No Inspectable Applications?

Xcode 项目格式:3.1、3.2、6.3 和 8.0 有什么区别?

从 NSData 或 UIImage 中查找图像类型

UITextView 从文本的底部或中间开始

以编程方式创建按钮并设置背景图像

如何计算 Swift 数组中元素的出现次数?

在 iOS 7 中更改返回按钮会禁用滑动导航返回