我正在制作一个应该支持从 iOS5 开始的 iOS 版本的应用程序。它使用 UIAlertView,如果它在用户按下主页按钮时可见,我希望在用户返回应用程序之前将其关闭(即,当使用多任务重新打开应用程序时它消失了)。应用程序委托中的所有方法都将其显示为不可见 (isVisible=NO),即使它在重新打开时仍然可见。有没有办法做到这一点?
谢谢。
我正在制作一个应该支持从 iOS5 开始的 iOS 版本的应用程序。它使用 UIAlertView,如果它在用户按下主页按钮时可见,我希望在用户返回应用程序之前将其关闭(即,当使用多任务重新打开应用程序时它消失了)。应用程序委托中的所有方法都将其显示为不可见 (isVisible=NO),即使它在重新打开时仍然可见。有没有办法做到这一点?
谢谢。
或者您从 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]
)
保留对UIAlertView
应用程序委托中显示的引用。显示警报时,设置参考;当警报被解除时,nil
退出参考。
在您的应用程序委托applicationWillResignActive:
或方法中,在对警报视图的引用上applicationDidEnterBackground:
调用该方法。dismissWithClickedButtonIndex:animated:
这将负责在按下“主页”按钮时将其关闭。
请记住,applicationWillResignActive:
诸如电话之类的事情会被调用,因此您需要决定在这种情况下是否要关闭警报,或者是否应该通过电话保持警报。