按下主页按钮时如何解除UIAlertView?

时间:2013-02-21 17:30:16

标签: ios objective-c xcode uialertview

我正在开发一款应该支持iOS5以上iOS版本的应用。它使用UIAlertView,如果用户按下主页按钮时它是可见的,我希望在用户返回应用程序之前将其解除(即当使用多任务处理重新打开应用程序时它已消失)。 app delegate中的所有方法都将其显示为不可见(isVisible = NO),即使它在重新打开时仍然可见。有没有办法做到这一点?

感谢。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:4)

在您的应用代表中保持对显示的UIAlertView的引用。显示警报时,设置参考;当警报被取消时,nil出来参考。

在您的应用代理的applicationWillResignActive:applicationDidEnterBackground:方法中,在警报视图的引用上调用dismissWithClickedButtonIndex:animated:方法。按下“主页”按钮可以解雇它。

请注意,applicationWillResignActive:将会拨打电话等内容,因此您需要决定是否要在此类情况下解除警报,或者是否应通过电话保留警报调用