`

iOS 正确获取最上层的window 用来显示HUD等弹窗信息

    博客分类:
  • ios
 
阅读更多

第一种

UIWindow *window = [[UIApplication sharedApplication].windows lastObject];

第二种

UIWindow *window = [UIApplication sharedApplication].keyWindow;

 第三种

- (UIWindow *)lastWindow

{

NSArray *windows = [UIApplication sharedApplication].windows;

for(UIWindow *window in [windows reverseObjectEnumerator]) {

if([window isKindOfClass:[UIWindowclass]] &&

CGRectEqualToRect(window.bounds, [UIScreen mainScreen].bounds))

returnwindow;

}

return[UIApplication sharedApplication].keyWindow;

}

 这三种都可以获取到window  但是在有特殊情况下 比如自定义了一个window显示出来 或者当键盘(也是一个窗口:UITextEffectsWindow)被弹出时可能会将要展示的UIView覆盖,这是必然的,因为有一个先后关系,后者居上。  我用的MBProgressHUD就有这个问题 ,导致我的hud没有显示出来。  结果发现比较好的始终都能显示HUD的获取window方法:

这种情况下可以监听键盘的弹出,在当前顶层的窗口来添加UIView控件。

+ (UIWindow*)lastWindow {

NSEnumerator*frontToBackWindows = [UIApplication.sharedApplication.windows reverseObjectEnumerator];

for(UIWindow*window in frontToBackWindows) {

BOOL windowOnMainScreen = window.screen==UIScreen.mainScreen;

BOOL windowIsVisible = !window.hidden&& window.alpha>0;

BOOL windowLevelSupported = (window.windowLevel>=UIWindowLevelNormal&& window.windowLevel<=UIWindowLevelNormal);

BOOL windowKeyWindow = window.isKeyWindow;

if(windowOnMainScreen && windowIsVisible && windowLevelSupported && windowKeyWindow) {

returnwindow;

}

}

     return[UIApplication sharedApplication].keyWindow;

}
 源自:https://www.jianshu.com/p/05bd82783942?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
分享到:
评论

相关推荐

    ios-提示信息弹窗.zip

    在iOS应用开发中,用户界面的设计与交互是至关重要的,其中一种常见的元素就是提示信息弹窗。本资源“ios-提示信息弹窗.zip”提供了一个名为“SYToast”的开源库,用于实现各种位置的提示信息展示,包括顶端、中间和...

    仿Ios弹窗效果

    在Android开发中,为了提供与iOS相似的用户体验,开发者经常需要实现仿iOS样式的弹窗效果。本教程将深入探讨两种方法,即如何创建自定义的仿iOS ActionSheet底部Dialog和仿iOS AlertDialog。 首先,我们来看仿iOS ...

    仿IOS底部弹窗

    "仿IOS底部弹窗"的实现主要涉及到`PopupWindow`组件的使用,这是一个轻量级的弹出窗口,可以用来显示任意视图。下面我们将深入探讨如何通过`PopupWindow`来创建具有进入退出动画以及背景变灰效果的底部弹窗。 首先...

    ios hud提示框

    在iOS应用开发中,HUD(Head Up Display)提示框是一种常用的用户界面元素,它能够向用户提供操作反馈,显示加载状态或者简单的信息提示。"ios hud 提示框"这个主题主要涵盖了如何在iOS应用中实现和使用这类提示框,...

    Anroid开发仿IOS弹窗

    在iOS中,底部弹窗(Bottom Sheet)常用于显示更多的选项或者详细信息,用户可以通过滑动来展开或收起。在Android中,我们可以使用`BottomSheetDialogFragment`来实现类似的效果。这个组件是`android.support.design...

    ios-封装多种弹窗.zip

    2. **Auto Layout**:为了适应不同尺寸的屏幕,弹窗的大小和位置通常使用Auto Layout进行约束设定,确保在不同设备上都能正确显示。 3. **UI设计**:弹窗的外观设计可以通过Storyboard或者代码进行,包括背景色、...

    android仿IOS弹窗

    在视觉效果上,为了让Android弹窗看起来更像iOS,我们需要关注UI元素的设计,如字体、颜色、圆角等。可以使用自定义布局文件,调整控件样式以匹配iOS的外观。同时,背景也需要特别处理,可能需要创建一个具有iOS风格...

    ios-完美封装自定义意见反馈弹窗.zip

    "ios-完美封装自定义意见反馈弹窗.zip" 就是一个专为iOS应用设计的自定义反馈弹窗解决方案。这个项目基于开源库YTTextViewAlertView,由开发者HZTonyAng在GitHub上维护。 YTTextViewAlertView是一个轻量级且高度可...

    ios-iOS 前台时的推送弹窗效果.zip

    4. **自定义弹窗**:`EBForeNotification`提供了丰富的接口来定制弹窗的样式,如标题、正文、图标等。你可以根据推送数据动态设置这些属性,以实现与系统通知一致的效果。 5. **动画效果**:库内置了与系统相同的...

    ios-Swift广告弹窗.zip

    这个名为“ios-Swift广告弹窗.zip”的资源包显然关注的是如何在iOS应用中实现广告展示,特别是通过弹窗形式。从描述中我们可以了解到,这个示例代码着重于自定义广告视图,允许用户横滑浏览广告,具有可定制的cell...

    BSPHP弹窗插件IOS

    这个插件主要用于在iOS应用程序中实现交互式的用户验证,例如提示信息、确认操作或者获取用户输入等。 【描述详解】 描述中提到,"BSPHP弹窗插件IOS"可以便捷地为iOS应用添加弹窗验证功能,这通常用于在用户执行...

    iOS 音频时长获取不正确

    本篇文章将深入探讨在iOS中使用lame库进行音频转换为MP3格式时遇到的时长获取不准确的问题,并提供解决方案。 首先,我们要了解lame库。LAME(LAME Ain't an MP3 Encoder)是一个开源的MP3编码库,它能够将各种音频...

    ios-获取通讯录信息.zip

    在iOS开发中,获取系统通讯录是常见的需求,主要用于实现如联系人同步、备份或特定功能的个性化设置等。这个名为“ios-获取通讯录信息.zip”的资源包提供了一个示例项目,帮助开发者理解如何利用iOS SDK来访问并操作...

    ios-广告弹窗.zip

    在iOS应用开发中,广告弹窗是常见的功能之一,用于展示广告信息,吸引用户注意力,增加广告收益。本文将深入探讨如何封装一个广告弹窗,包括加载本地和网络图片的技术细节。 首先,我们需要理解"弹出视图"(Pop-up ...

    ios-类似qq顶部提醒弹窗.zip

    - 在iOS开发中,`TSRemindView`可能是一个自定义的UIView子类,专门设计用来模拟QQ的顶部提醒弹窗。这个类可能包含了设置文字、图标、背景色、动画效果等方法,使得开发者可以方便地根据需求定制弹窗的内容和样式。...

    ios-一个简单的hud提示框.zip

    通过运行这个示例,开发者可以直观地看到 HUD 的各种用法,包括显示文本信息、加载指示器、成功或错误图标等。 在iOS开发中,常见的HUD实现方式有MBProgressHUD和SVProgressHUD等,但这些库可能功能较为复杂,对于...

    ios-仿滴滴、易到广告弹窗.zip

    在iOS开发中,创建引人注目的用户界面是至关重要的,而广告弹窗作为一种常见的推广方式,能够有效地吸引用户的注意力。本示例“ios-仿滴滴、易到广告弹窗.zip”提供了一种简单快捷的方法来实现类似滴滴、易到应用中...

    H5仿ios选择弹窗/多级联动选择

    在H5开发中,模拟iOS风格的选择弹窗和多级联动选择是常见的需求,尤其是在移动端应用和网页设计中。这种功能能够提供用户友好的交互体验,使得用户在浏览器环境中也能感受到与原生iOS应用类似的使用体验。下面我们将...

    iOS自定义风格弹窗

    在iOS应用开发中,弹窗是一种常见的用户交互方式,用于展示临时信息或获取用户的即时反馈。自定义风格的弹窗可以提升应用的用户体验,使其更符合品牌的视觉风格和交互设计。"iOS自定义风格弹窗"是这个话题的核心,它...

Global site tag (gtag.js) - Google Analytics