是否可以不解雇UIAlertView

Cor*_*oyd 27 iphone cocoa-touch uialertview

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

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
Run Code Online (Sandbox Code Playgroud)

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

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

为什么UIAlertViewDelegate协议具有:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
Run Code Online (Sandbox Code Playgroud)

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
Run Code Online (Sandbox Code Playgroud)

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

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

ken*_*ytm 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
Run Code Online (Sandbox Code Playgroud)

非正式地你可以定义一个

-(void)alertSheet:(UIAlertSheet*)sheet buttonClicked:(id)button;
Run Code Online (Sandbox Code Playgroud)

委托方法将使其绕过-dismissWithClickedButtonIndex:animated:,但它没有文档,所以我不知道它是否适合你.

  • 不幸的是,这在iOS 7中不再有效.`dismissWithClickedButtonIndex:animated:`在UIAlertViewDelegate回调之后不再被调用,因此用空方法实现覆盖不再是解决方案. (8认同)