无需参考即可找到 UIAlertView

Posted

技术标签:

【中文标题】无需参考即可找到 UIAlertView【英文标题】:Find UIAlertView without having reference to it 【发布时间】:2011-09-28 07:40:03 【问题描述】:

我正在编写应用程序测试并想检查当前是否显示 UIAlertView。这意味着我没有指向它的指针,我需要知道所显示的 UIAlertView 的所有者是谁,或者可以在哪些视图堆栈上找到它。

【问题讨论】:

可能重复:iPhone SDK: check if a UIAlertView is showing 谢谢。检查应用程序的窗口是解决方案。没有考虑到有几个窗口。只检查了由应用委托控制的那个。 【参考方案1】:

[更新] 实际上,下面的解决方案不适用于 ios 7,因为警报视图不再绑定到特定窗口。阅读这里了解详情:https://***.com/a/18703524/942107

根据 KennyTM 在 Sebastien 提供的另一个问题的链接中的建议,我创建了一个 UIAlertView 类别,其中包含一个返回 UIAlertView 的方法,如果显示能够以编程方式将其关闭。

UIAlertViewAdditions.h:

#import <UIKit/UIKit.h>

@interface UIAlertView (UIAlertViewAdditions)

+ (UIAlertView *) getUIAlertViewIfShown;

@end

UIAlertViewAdditions.m:

#import "UIAlertViewAdditions.h"

@implementation UIAlertView (UIAlertViewAdditions)

+ (UIAlertView *) getUIAlertViewIfShown 
    if ([[[UIApplication sharedApplication] windows] count] == 1) 
        return nil;
    

    UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    if ([window.subviews count] > 0) 
        UIView *view = [window.subviews objectAtIndex:0];
        if ([view isKindOfClass:[UIAlertView class]]) 
            return (UIAlertView *) view;
        
    
    return nil;


@end

【讨论】:

我在我的项目中使用了这个代码,现在它在 iOS7 中不起作用:( 试试UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:2];UIView *view = [window.subviews objectAtIndex:1]; 但是更简洁的方法是检查类名

以上是关于无需参考即可找到 UIAlertView的主要内容,如果未能解决你的问题,请参考以下文章

我找到了一种使用 Formspree 无需后端即可直接从网站发送电子邮件的方法。但是我不知道如何在提交时自定义消息

无需评估即可创建 Weka 分类器模型

无需下载即可获取 Gmail 附件文件名

无需点击来自 AppWidgetProvider 的任何事件即可开始另一个活动

无需 unicode 转义即可读写 Java 属性

Unix命令('stat'和'ls'除外)无需解析即可获取文件修改日期