是否可以不解雇UIAlertView

时间:2010-01-12 18:37:40

标签: iphone cocoa-touch uialertview

UIAlertviewDelegate协议有几个可选方法,包括:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

这似乎表明并非所有按钮点击都会实际关闭警报视图。但是我认为没有办法将警报视图配置为不按任何按钮自动关闭。

我是否必须创建一个子类才能完成此任务?

为什么UIAlertViewDelegate协议有:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

如果它没有选择支持不点击每个按钮点击警报视图?

简介旁白: 我意识到UIAlertView的设计目的。但我的目的是允许用户在应用退出之前将一些文本复制到粘贴板(当警报视图被解除时会自动发生。

5 个答案:

答案 0 :(得分:27)

是。子类UIAlertView然后重载-dismissWithClickedButtonIndex:animated:,例如

@implementation MyAlertView 
-(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated {
   if (buttonIndex should not dismiss the alert)
      return;
   [super dismissWithClickedButtonIndex:buttonIndex animated:animated];
}
@end

非正式您可以定义

-(void)alertSheet:(UIAlertSheet*)sheet buttonClicked:(id)button;

代表的方法会使其绕过-dismissWithClickedButtonIndex:animated:,但它是无证件,因此我不知道它是否适合您。

答案 1 :(得分:3)

willPresentAlertView:didPresentAlertView:alertView:willDismissWithButtonIndex:alertView:didDismissWithButtonIndex:用于跟踪UIAlertView动画的开头和结尾。

不需要跟踪UIAlertView动画的应用程序只需使用alertView:clickedButtonAtIndex:即可。该方法的文档说“在调用此方法后,接收器将自动被解除。”

答案 2 :(得分:2)

在我看来:没有理由保持alertView。即使你想保留它,也要考虑重新展示"它,通过保持参考,然后调用[alertView show] ==> 不需要再分类。好消息,是吗?

答案 3 :(得分:1)

  

警告

     

从某些来源我听说很少有应用被拒绝了   遵循这个过程。在iOS6期间我很幸运,所以我很幸运   在这里显示代码。使用风险: - /

子类化是最好的方法。创建一个bool标志,表示警报应该保留还是不存在。

这是UIAlertView

的子类
//
//  UICustomAlertView.h
//

#import <UIKit/UIKit.h>

@interface UICustomAlertView : UIAlertView
{

}
@property(nonatomic, assign) BOOL dontDisppear;
@end

//
//  UICustomAlertView.m
//

#import "UICustomAlertView.h"

@implementation UICustomAlertView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated {

    if(self.dontDisppear)
        return;
    [super dismissWithClickedButtonIndex:buttonIndex animated:animated];
}
@end

这就是我在代码中使用它的方式

if(![txtUsername.text isEqualToString:@"admin"] && ![txtPassword.text isEqualToString:@"admin"])
{
     alertLogin.dontDisppear = YES;
     alertLogin.message = NSLocalizedString(@"my_alert", nil);
}
else
{
     alertLogin.dontDisppear = NO;
     // proceed
}

答案 4 :(得分:1)

#import "MLAlertView.h"

@implementation MLAlertView


-(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated {
}

-(void)dismissNow:(NSInteger)buttonIndex  {
     [super dismissWithClickedButtonIndex:buttonIndex animated:YES];
}