1.1----1UIAlertView显示警报
显示警报与UIAlertView
问题
你想在警告的形式显示一条消息给用户。这可以用来要求他们确认的动作,要求他们的用户名和密码,或者干脆让他们进入,你可以在你的应用程序使用一些简单的文字。
解决方案
利用UIAlertView类。讨论
如果你是一个iOS的用户,您肯定已经看到警报视图。图1-1示出了一个例子。
图1-1。在iOS中的警报视图的例子
初始化警报视图的最佳方法是使用其指定初始化:
- (void) viewDidAppear:(BOOL)paramAnimated{
[super viewDidAppear:paramAnimated];
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Alert"
[alertView show];
}
message:@"You've been delivered an alert"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Ok", nil]
当此警报视图显示给用户,她会看到类似于图1-2所示的东西。
1-2。一个简单的警报视图显示给用户
为了显示一个警报视图给用户,我们使用警报视图的显示方式。让我们来看看每一个我们传递给警报视图的初始化的参数的说明:
tittle
该警报视图显示在顶部时,它显示给用户的字符串。该字符串是图1-2标题。
message
这被显示给用户的实际信息。在图1-2中,该消息被设置为留言。
(委托) delegate
我们传递的警报视图中可选的委托对象。这个对象将得到通知每当警报的状态变化;例如,当用户点击在警报视图的一个按钮。传递给这个参数的对象必须符合UIAlertViewDelegate协议。
cancelButtonTitle
将分配给该取消按钮上的警报视图中的字符串。有一个取消按钮的警报视图通常要求的操作的用户。如果用户不舒服的表演动作,他会按取消键,他将按下取消按钮。这个按钮的标题并不一定必须说取消。它是由你来指定该按钮的标题。此参数是可选的;你可以把一个对话框,没有取消按钮。
otherButtonTitles
那你想拥有的任何其他按钮的标题出现在警报视图。用逗号分隔的标题,并确保你结束游戏列表了零,这就是所谓的前哨。此参数是可选的。
它可以创建没有任何按钮警报视图。但鉴于无法由用户被消除。如果你创建这样一个观点,你作为程序 员,需要确保该警报视图会自动被消除;例如,将显示后三秒钟。不,不排除本身的任何按钮警报视图会自 动给出一个真正的用户体验不佳。不仅你的应用程序获得了App Store的收视率低阻止从用户访问的用户 界面,但有可能你的应用程序将获得由苹果公司拒绝。可以创建没有任何按钮警报视图。但鉴于无法由用户 被解雇。如果你创建这样一个观点,你作为程序员,需要确保该警报视图会自动被开除;例如,将显示后三 秒钟。不,不排除本身的任何按钮警报视图会自动给出一个真正的用户体验不佳。不仅你的应用程序获得了 App Store的收视率低阻止从用户访问的用户界面,但有可能你的应用程序将获得由苹果公司拒绝。
警报意见可以采取各种不同的款式。在UIAlertView类有一个名为类型UIAlertViewStyle警报ViewStyle财产
AlertView可以采取各种不同的款式。在UIAlertView类有一个名为类型UIAlertViewStyle警报ViewStylestyle
typedef NS_ENUM(NSInteger, UIAlertViewStyle)
{ UIAlertViewStyleDefault = 0, UIAlertViewStyleSecureTextInput, UIAlertViewStylePlainTextInput, UIAlertViewStyleLoginAndPasswordInput };
以下是每一种风格都行:
UIAlertViewStyleDefault
这是一个警报视图的默认样式,就像我们在图1-2中看到的。
UIAlertViewStyleSecureTextInput
通过这种方式,在警报视图将包含一个安全的文本字段,它隐藏在用户键入的实际字符。举例来说,如果你问她的网银证书用户,可以选择这种风格的警报视图中。
IAlertViewStylePlainTextInput
在这种风格,警报视图将显示不安全的文本字段的用户。这种风格是伟大的,如果你只是想要求一个纯文本输入,用户如她的电话号码。
UIAlertViewStyleLoginAndPasswordInput
通过这种方式,警报视图将显示两个文本字段:不安全的一个用于输入用户名和一个安全的密码。
如果您需要得到通知,当用户与警报视图进行交互,指定一个委托对象,以您的警报视图。这代表必须符合UIAlertViewDelegate协议。在这个协议中定义的最重要的方法是alertView:clickedButtonAtIndex:方法,它是只要用户点击在警报视图的按钮中的一个调用。按钮指数是通过clickedButtonAtIn DEX参数传递给你。
作为一个例子,让我们显示警报视图给用户,并问她是否愿意去参观野生动物园网站在按下一个链接到我们的UI提供的网站后。我们会显示两个按钮对我们的警报视图:是和否在我们的警报视图的委托,我们会发现,她拍了拍哪个按钮,并会采取相应的行动。
让我们首先实现两个返回我们的两个按钮的标题很简单的方法:
- (NSString *) yesButtonTitle{ return @"Yes";
}
- (NSString *) noButtonTitle{ return @"No";
}
现在,我们需要确保我们符合我们的视图控制器的UIAlertViewDelegate协议:
#import "ViewController.h"
@interface ViewController () <UIAlertViewDelegate> @end
@implementation ViewController
下一步是创建和显示我们的警告视图给用户:
- (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated];
self.view.backgroundColor = [UIColor whiteColor];
NSString *message = @"Are you sure you want to open this link in Safari?";
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Open Link"
message:message
delegate:self
cancelButtonTitle:[self noButtonTitle]
otherButtonTitles:[self yesButtonTitle], nil];
[alertView show];
}
图1-3。用是和否按钮查看警报
现在,我们需要一种方法来了解用户是否选择Yes(是),或在我们的警报视图的任何选项。对于这一点,我们需要实现的alertView:clickedButtonAtIndex:我们的警报视图的委托方法:
- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
if ([buttonTitle isEqualToString:[self yesButtonTitle]]){ NSLog(@"User pressed the Yes button.");
}
else if ([buttonTitle isEqualToString:[self noButtonTitle]]){
NSLog(@"User pressed the No button.");
}
}
请记住,在多个开发人员在同一个源代码工作的大项目,它通常更容易比较警报视图标题的字符串,而不是哪一个按钮上的警报视图中用户选择的按钮的索引,采摘该按钮的索引。该指数的解决方案的工作,程序员必须找出构建的警报视图,并根据代码的代码,找出哪些按钮有什么指标。在我们的解决方案,任何开发人员,即使没有任何知识,如何在警报视图构建后,可以分辨出哪if语句做什么。
正如你所看到的,我们使用的是buttonTitleAtIndex:UIAlertView的方法。我们通过该警报视图中某个按钮的从零开始的索引,以这种方法,并会尽快回复,表示该按钮的标题,如果有任何字符串。使用这种方法,我们能够确定哪个按钮的用户实施了点击上。该按钮的索引将被传递给我们的alertView的clickedButtonAtIndex:方法buttonIndex参数:,但如果你需要的按钮的标题时,你就需要使用buttonTitleA tIndex:UIAlertView的方法。这就是它;完成任务!
您还可以使用警报视图用于文本输入,如索要他的信用卡号码或地址的用户。对于这一点,如前面提到的,我们需要使用UIAlert ViewStylePlainTextInput警报视图风格。下面是一个例子:
- (void) viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated];
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Credit Card Number"
message:@"Please enter your credit card number:"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Ok", nil];
[alertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
/* Display a numerical keypad for this text field */
UITextField *textField = [alertView textFieldAtIndex:0];
textField.keyboardType = UIKeyboardTypeNumberPad;
[alertView show];
}
如果您在模拟器中运行你的应用程序现在,你会得到类似图1-4的结果。
图1-4。以纯文本输入的警报视图
我们改变了警报视图的风格UIAlertViewStylePlainTextInput在这段代码中,但是我们做了别的东西为好。我们检索到的参照第一,而且我们知道我们会对警报视图和使用的文本字段的引用来改变文本字段的键盘类型的唯一文本字段。有关文本字段的详细信息,请参考食谱1.19。
除了一个纯文本输入,你可以要求安全的文本用户。您通常会使用这个,如果用户正在输入的文字是敏感的,如密码(见图1-5)。下面是一个例子:
- (void) viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated];
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Password"
30 | Chapter 1: Implementing Controllers and Views
message:@"Please enter your password:"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Ok", nil];
[alertView setAlertViewStyle:UIAlertViewStyleSecureTextInput];
[alertView show];
}
图1-5。在警报视图安全的文本输入
该UIAlertViewStyleSecureTextInput样式非常相似UIAlertViewStyle PlainTextInput,除了文本字段被设置为代替一些中性的字符所输入的文本的每个字符。
接下来的风格,这是非常有用的,显示两个文本字段,一个用户名和其他密码。首先是一个纯文本输入字段,另一个是安全的:
- (void) viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated];
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Password"
message:@"Please enter your credentials:"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Ok", nil];
[alertView setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
[alertView show];
}
其结果将类似于在图1-6所示。
图1-6。警报视图的登录名和密码的风格
另请参阅
食谱1.19