检查 UIView 是不是显示 UIAlertView
Posted
技术标签:
【中文标题】检查 UIView 是不是显示 UIAlertView【英文标题】:Check if UIView is displaying a UIAlertView检查 UIView 是否显示 UIAlertView 【发布时间】:2012-05-23 21:15:42 【问题描述】:是否可以确定当前 UIView 是否显示 UIAlertView(除了每次创建 UIAlertView 时设置一个变量)。
我在想一些类似的事情
if ([self.view.subviews containsObject:UIAlertView]) ...
但这显然行不通。
【问题讨论】:
可能重复***.com/questions/2528929/… 类似,但接受的答案对我没有好处,因为我有这么多实例化,替代答案是使用未记录的方法......我想没有快速简便的方法跨度> 您只是想知道显示的警报还是您关心它的来源? 只想知道当前是否可见。或者至少已经显示了一个,因为一旦 iVar 被关闭,我就可以将其设置为 TRUE。我只是不想在显示警报的每个实例中都设置 iVar。 请问您要创建什么样的交互场景? 【参考方案1】:这不适用于 iOS7 及更高版本。
[alertView Show] 我猜想在主窗口上添加子视图。
for (UIWindow* window in [UIApplication sharedApplication].windows)
for (UIView *subView in [window subviews])
if ([subView isKindOfClass:[UIAlertView class]])
NSLog(@"has AlertView");
else
NSLog(@"No AlertView");
【讨论】:
这最接近我想要达到的目标,所以我会给它答案,尽管由于某种原因它并没有真正起作用,因为我不确定 UIAlertView 是否仍然存在显示后的子视图,即使它仍然在屏幕上。 我试过这个,但由于某种原因它不起作用。但我在***.com/a/2529692/1091926 找到了另一个答案,它对我有用。代码看起来很相似。 (我猜是因为“if ([subviews count] > 0)”) 其实我相信它的工作原理是因为 [subviews objectAtIndex:0]【参考方案2】:我认为它会起作用:
-(BOOL) doesAlertViewExist
if ([[UIApplication sharedApplication].keyWindow isMemberOfClass:[UIWindow class]])
return NO;//AlertView does not exist on current window
return YES;//AlertView exist on current window
【讨论】:
虽然这在技术上可行,但如果显示非 UIAlertView 窗口,它可能会引入错误。【参考方案3】:如果您将 UIAlertView 作为属性存储在显示它的视图控制器上,然后运行您的代码:
if ([self.view.subviews containsObject:self.myalertview]) ...
应该可以的。
【讨论】:
谢谢 - 我试图避免自定义我显示的每个警报视图,因为它们有很多。以上是关于检查 UIView 是不是显示 UIAlertView的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 UITableViewCell 是不是包含 UIView
UIView 未以编程方式显示在 UIScrollView 中
如何检查多个 UIView 子视图相互重叠显示的贝塞尔路径内的触摸事件?