我想创建一个侦听器,只要向用户显示UIAlertView就会抓取它。
我首先设置了这个观察者。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(windowDidBecomeVisible:)
name:UIWindowDidBecomeVisibleNotification
object:nil];
然后获取UIWindow对象,如下所示。
- (void)windowDidBecomeVisible:(NSNotification *)notification
{
UIWindow *window = [notification object];
}
但是从这个窗口对象中,我无法获得UIAlertView。 此窗口下只有一个子视图,该子视图没有任何子视图。
下面的链接显示了从窗口对象获取UIAlertView对象的代码,但这不起作用。 https://stackoverflow.com/a/2529692/1709287
也许iOS7有一些技巧可以让UIAlertView被包装和隐藏。 有谁知道如何跟踪UIWindow对象的子视图(或成员)以达到当前显示在屏幕上的UIAlertView对象?
答案 0 :(得分:2)
人们通常在iOS 6中做过这种事情。
苹果故意在iOS 7上无法实现。你不能再这样做了。唯一的选择是私有API,使用这些API会使您的应用从商店中被拒绝。如果您需要此级别的控制,则必须停止使用UIAlertView。
答案 1 :(得分:1)
在iOS 7中,您可能无法通过窗口获取alerview
的实例。您必须在应用程序中明确地保留引用。
我们遇到了同样的问题。问题已经解决了
1)对UIAlertView
说MYAlertview
2)在AppDelegate中有MyAlertView的属性(你可以选择任何实例)
3)覆盖show:
方法
- (void)Show{
AppDelegate *appdelegate = (AppDelegate)[[UIApplication SharedApplication] delegate];
if([[appdelegate alertView] isVisible])
[[appdelegate alertView] dismissWithClickedButtonIndex:0 animated:NO]; //We have requirement like dismissing you can have any operation here
[appDelegate setAlertView:self];
}
4)将所有UIAlertView
替换为MYAlertview