如何从iOS7中的UIWindow对象中获取UIAlertView

时间:2014-04-13 03:21:54

标签: ios objective-c uialertview

我想创建一个侦听器,只要向用户显示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对象?

2 个答案:

答案 0 :(得分:2)

人们通常在iOS 6中做过这种事情。

苹果故意在iOS 7上无法实现。你不能再这样做了。唯一的选择是私有API,使用这些API会使您的应用从商店中被拒绝。

如果您需要此级别的控制,则必须停止使用UIAlertView。

答案 1 :(得分:1)

在iOS 7中,您可能无法通过窗口获取alerview的实例。您必须在应用程序中明确地保留引用。

我们遇到了同样的问题。问题已经解决了

1)对UIAlertViewMYAlertview

进行子类化

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