1

我正在制作一个应该支持从 iOS5 开始的 iOS 版本的应用程序。它使用 UIAlertView,如果它在用户按下主页按钮时可见,我希望在用户返回应用程序之前将其关闭(即,当使用多任务重新打开应用程序时它消失了)。应用程序委托中的所有方法都将其显示为不可见 (isVisible=NO),即使它在重新打开时仍然可见。有没有办法做到这一点?

谢谢。

4

2 回答 2

7

或者您从 UIAlertView 继承您的类并为 UIApplicationWillResignActiveNotification 添加 NSNotification 观察者,并在发生通知时调用 alertview 方法dismissWithClickedButtonIndex:

示例:.h 文件

#import <UIKit/UIKit.h>

@interface ADAlertView : UIAlertView

@end

.m 文件

#import "ADAlertView.h"

@implementation ADAlertView

- (void) dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (id) initWithTitle:(NSString *)title
             message:(NSString *)message
            delegate:(id)delegate
   cancelButtonTitle:(NSString *)cancelButtonTitle
   otherButtonTitles:(NSString *)otherButtonTitles, ... {
    self = [super initWithTitle:title
                        message:message
                       delegate:delegate
              cancelButtonTitle:cancelButtonTitle
              otherButtonTitles:otherButtonTitles, nil];

    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self
             selector:@selector(dismiss:)
                 name:UIApplicationDidEnterBackgroundNotification
               object:nil];
    }

    return self;
}

- (void) dismiss:(NSNotification *)notication {
    [self dismissWithClickedButtonIndex:[self cancelButtonIndex] animated:YES];
}

@end

使用从 UIAlertView 继承的您自己的类,您不需要存储指向 alertview 或其他内容的链接,您只需要做一件事,将 UIAlertView 替换为 ADAlertView(或任何其他类名)。随意使用此代码示例(如果您不使用 ARC,则应在[super dealloc]之后添加到 dealloc 方法[[NSNotificatioCenter defaultCenter] removeObserver:self]

于 2013-02-21T17:50:53.470 回答
4

保留对UIAlertView应用程序委托中显示的引用。显示警报时,设置参考;当警报被解除时,nil退出参考。

在您的应用程序委托applicationWillResignActive:或方法中,在对警报视图的引用上applicationDidEnterBackground:调用该方法。dismissWithClickedButtonIndex:animated:这将负责在按下“主页”按钮时将其关闭。

请记住,applicationWillResignActive:诸如电话之类的事情会被调用,因此您需要决定在这种情况下是否要关闭警报,或者是否应该通过电话保持警报。

于 2013-02-21T17:39:36.600 回答