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的设计目的。但我的目的是允许用户在应用退出之前将一些文本复制到粘贴板(当警报视图被解除时会自动发生。
答案 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];
}