iOS iOS8新特性-UIAlertController

iOS iOS8新特性--UIAlertController

1. iOS7及iOS7之前警告类控件有UIAlertView和UIActionSheet

1.1 UIAlertView的使用

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"这是一个UIAlertView" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"关闭", nil];

alert.alertViewStyle = UIAlertViewStylePlainTextInput;

/**   alertViewStyle的枚举值如下

UIAlertViewStyleDefault = 0,

UIAlertViewStyleSecureTextInput,

UIAlertViewStylePlainTextInput,

UIAlertViewStyleLoginAndPasswordInput

*/

[alert show];

//  UIAlertViewDelegate

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

1.2 UIActionSheet的使用

UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"这是一个UIActionSheet" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定"

otherButtonTitles:@"关闭", nil];

[sheet showInView:self.view];

// UIActionSheetDelegate

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

2. iOS8开始,用UIAlertController替代UIAlertView+UIActionSheet

2.1 UIAlertController的使用 (Style: UIAlertControllerStyleAlert)

// 初始化UIAlertController

  UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"警告" message:@"iOS新控件UIAlertController" preferredStyle:UIAlertControllerStyleAlert];

// 添加按钮,注意如果Block的循环引用

__weak typeof(alert) weakAlert = alert;

[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {

    // block内部写点击按钮之后做的事情

    NSLog(@"点击了确定按钮--%@-%@", [weakAlert.textFields.firstObject text], [weakAlert.textFields.lastObject text]);

}]];

// 添加文本框

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {

textField.textColor = [UIColor blueColor];

textField.text = @"请输入用户名";

[textField addTarget:self action:@selector(usernameDidChange:) forControlEvents:UIControlEventEditingChanged];

// 也可以用通知监听TextField的变化

     //[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(usernameDidChange:) name:UITextFieldTextDidChangeNotification object:textField];

}];

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {

textField.secureTextEntry = YES;

textField.text = @"123456";

}];

// 弹出UIAlertController

[self presentViewController:alert animated:YES completion:nil];

// textField EditingChanged时,回调的方法

- (void)usernameDidChange:(UITextField *)username

{

NSLog(@"%@", username.text);

}

2.2 UIAlertController的使用 (Style: UIAlertControllerStyleActionSheet)

// 在2.1代码上,修改 初始化UIAlertController 的代码

  UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"警告" message:@"iOS新控件UIAlertController" preferredStyle:

UIAlertControllerStyleActionSheet];

运行程序后报错,因为text field只能用在Style:UIAlertControllerStyleAlert 的UIAlertController上,把添加textFiled的代码注销掉,再运行程序就正常了

reason: ‘Text fields can only be added to an alert controller of style UIAlertControllerStyleAlert‘

2.3通过上面的介绍,可以看出苹果有意把UIAlertView,UIActionSheet统一在一起,实际上,苹果还统一了iphone和ipad的UIAlertController的处理方式

2.3.1 新建项目时,Devices选择Universal,语言选OC(截图错误)

2.3.2 在Main.storyboard中拖导航控制器,让mainViewController成为导航控制器的rootViewController

2.3.3 代码示例

  // 初始化UIAlertController

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"警告" message:@"iOS新控件UIAlertController" preferredStyle:

UIAlertControllerStyleAlert];

// 设置popover指向的item

alert.popoverPresentationController.barButtonItem = self.navigationItem.leftBarButtonItem;

// 添加按钮

[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {

NSLog(@"点击了确定按钮");

}]];

[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {

NSLog(@"点击了取消按钮");

}]];

// 弹出UIAlertController

[self presentViewController:alert animated:YES completion:nil];

注:左图是在iphone上运行效果,右图是在ipad上的运行效果,Style为UIAlertControllerStyleAlert时,显示样式一致

  

2.3.4 把2.3.3的初始化代码改成Style:UIAlertControllerStyleActionSheet

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"警告" message:@"iOS新控件UIAlertController" preferredStyle:UIAlertControllerStyleActionSheet];

 注:左图是iphone,右图是ipad,用一份代码实现了在iphone和ipad上不同的显示样式
  

时间: 2024-12-17 08:23:24

iOS iOS8新特性-UIAlertController的相关文章

iOS iOS8新特性--UIPopoverPresentationController

1.回顾UIPopoverController的使用,下面这份代码只能在ipad下运行 // 初始化控制器,SecondViewController类继承自UIViewController SecondViewController *vc = [[SecondViewController alloc] init]; // 把vc包装成UIPopoverController UIPopoverController *popover = [[UIPopoverController alloc] in

iOS iOS8新特性--UIPresentationController

1. UIPresentationController的作用 1>管理所有Modal出来的控制器 2>管理通过这个方法  - (void) presentViewController:(UIViewController *) animated:(BOOL) completion:^(void)completion;显示出来的控制器 3>管理\监听 切换控制器的过程 2. UIPresentationController的作用 1>控制器一旦调了present方法,控制器的prese

iOS8新特性(1)——UIAlertController

一.iOS8介绍 iOS8 新特性,主要是UI上进行了统一 1.UIAlertController 2.UIPresentaionController:管理所有通过modal出来的控制器(看笔记) 3.UIPopoverPresentationController 4.SizeClass + Autolayout 5.App Extension 应用扩展 6.Core Image(iOS 5开始就有了,滤镜美图秀秀型 ) 二.UIAlertController 1.以往我们使用的时候,都是用的 

【学习ios之路:UI系列】(UISearchBar,UISearchDisplayController) 和UISearchController(iOS8新特性)

1.UISearchBar(效果如下:) ①创建UISearchBar对象 //初始化,定义frame UISearchBar *bar = [[UISearchBar alloc] initWithFrame:CGRectMake (0, 50, self.view.frame.size.width, 80)]; //添加到控制器的视图上 [self.view addSubview:bar]; ②UISerachBar的属性 //autocapitalizationType:包含4种类型,但是

iOS8新特性扩展(Extension)应用之一——Today扩展

iOS8新特性扩展(Extension)应用之一--Today扩展 一.理解扩展 1.简介 基于iOS系统的安全性考虑,其应用的数据存储是通过沙盒模式进行的,要实现应用之间的数据共享十分困难,功能共享就更加棘手.在iOS8系统中,apple为我们提供了一个革命性的功能:扩展.我们可以通过扩展来使app间数据甚至功能进行共享. 2.几种扩展模式 (1)今日视图扩展:today 这个扩展也被叫做 widget.该扩展可以将今日发生的简短消息放到消息中心的「今日」视图里.这个功能类似于安卓系统中的小控

iOS 8新特性之扩展(Extension)

本文由海水的味道收集整理,欢迎转载 当前版本 0.0.1  iOS 8新特性之扩展 一.扩展概述 扩展(Extension)是iOS 8中引入的一个非常重要的新特性.扩展让app之间的数据交互成为可能.用户可以在app中使用其他应用提供的功能,而无需离开当前的应用. 在iOS 8系统之前,每一个app在物理上都是彼此独立的,app之间不能互访彼此的私有数据. 而在引入扩展之后,其他app可以与扩展进行数据交换.基于安全和性能的考虑,每一个扩展运行在一个单独的进程中,它拥有自己的bundle, b

iOS8新特性扩展(Extension)应用之三——照片编辑插件

iOS8新特性扩展(Extension)应用之三--照片编辑插件 通过前几篇博客的介绍,我们了解到扩展给app提供的更加强大的交互能力,这种强大的交互能力另一方面体现在照片编辑插件的应用. 和通常一样,我们先创建一个工程,然后新建一个Target,选择photo editing: 从模板中,我们可以看到系统为我们创建了一个controller,这个controller就是用于处理照片的controller,其中方法如下: - (BOOL)canHandleAdjustmentData:(PHAd

Ios8新特性-应用程序扩展

一.什么是应用程序扩展? 应用程序扩展不是一个应用,它是主体应用程序(containing app)中一个单独的包,并能生成单独的二进制文件供其他应用调用. 个人感觉,类似于WP中的启动器,把系统当个软件,启动器就是应用程序扩展: 二.与普通应用的关系 1.应用扩展不同于应用,但是需要基于应用去开发应用扩展,每个应用扩展都是独立于应用运行的二进制文件. 2.与主体应用程序不同,应用扩展实现的是一个特定的.狭义范围内的任务,并且要严格遵循扩展点的协议. 三.生命周期 1.生命周期开始于用户从某个应

iOS8新特性扩展(Extension)应用之二——分享插件

iOS8新特性扩展(Extension)应用之二--分享插件 在上一篇博客中,介绍了iOS8新特性扩展功能之一的Today功能:http://my.oschina.net/u/2340880/blog/485533,这里我们再介绍一下分享的扩展功能. 在iOS8之前,除了一些主流的社交平台,例如苹果支持内容分享外,其他开发者的应用若要加入分享的功能,将会十分的复杂.在iOS8的新特性中,apple为我们准备了这样的扩展功能. 首先创建工程,在我们的工程中新建一个Target: 之后,模板中会为我