iOS UIAlertController 用法介绍

2023-05-16

原文:https://www.jianshu.com/p/b72753c51b39

UIAlertController
UIAlertController的用法很简单,我们却经常使用.它用以取代iOS 8.0 之前的UIAlertView和UIActionSheet.

  1. UIAlertViewController 是一个ViewController.不同于之前的UIAlertView是继承自UIView.

同使用UIKit中其他Controller一样,使用它,首先得获取一个UIAlertController类型的对象.这是第一步.

//获取alertController对象
+ (instancetype)alertControllerWithTitle:(nullable NSString *)title message:(nullable NSString *)message preferredStyle:(UIAlertControllerStyle)preferredStyle;
//添加action
- (void)addAction:(UIAlertAction *)action; 

1.1 获取UIAlertController对象:通过使用UIAlertController类的快速构建方法+ (instancetype)alertControllerWithTitle:(nullable NSString *)title message:(nullable NSString *)message preferredStyle:(UIAlertControllerStyle)preferredStyle;需要传入三个参数,类型为NSString的title 和 message, 以及确定UIAlertControllerStyle的参数.
注意:这是唯一的获取UIAlertController对象的方法. 尽管你可以使用父类UIViewController的初始化方法,但是UIAlertController有个属性是不可以写入的,只能通过快速创建方法获取对象的时候传入参数来确定.下面是这个属性:

 @property (nonatomic, readonly) UIAlertControllerStyle preferredStyle; 
  • 看看参数title, message是什么?确定传入参数

代码:

-(UIAlertController*)alertVC
{
    if (!_alertVC) {
        _alertVC = [UIAlertController alertControllerWithTitle:@"alertVCTitle" message:@"alertVCMessage" preferredStyle:UIAlertControllerStyleAlert];
    }
    
    return _alertVC;
} 

显示结果:

参数的显示位置

  • alertViewController的Style参数
    第三个参数是Style参数,传入参数以确定显示的alertController的样式.
    看看都有什么样式:
 >typedef NS_ENUM(NSInteger, UIAlertControllerStyle) {
    UIAlertControllerStyleActionSheet = 0,
    UIAlertControllerStyleAlert
} NS_ENUM_AVAILABLE_IOS(8_0); 

StyleAlert样式

StyleActionSheet样式

当设置StyleActionSheet 这款样式的时候,这时候,alertController的view会从屏幕底部弹出,而宽和屏幕的宽差不多.不像StyleAlert样式是从屏幕中央出现.

  1. 使用UIAlertView
    使用UIAlerView我们使用对象初始化方法来创建view对象和添加view上面的Button:
- (instancetype)initWithTitle:(nullable NSString *)title message:(nullable NSString *)message delegate:(nullable id /*<UIAlertViewDelegate>*/)delegate cancelButtonTitle:(nullable NSString *)cancelButtonTitle otherButtonTitles:(nullable NSString *)otherButtonTitles, ... 

- (NSInteger)addButtonWithTitle:(nullable NSString *)title;    // returns index of button. 0 based.
- (nullable NSString *)buttonTitleAtIndex:(NSInteger)buttonIndex;
//代理方法
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 

也可以额外添加alertView上面的Button,并通过初始化时候设置的代理来处理点击事件,这里不同的Button 是通过**编号(buttonIndex)**来区分的.代理通过实现协议方法来处理不同按钮的点击事件.
UIAertController 和 UIAlertView不同,是通过它的一个对象方法- (void)addAction:(UIAlertAction *)action; 添加UIAlertAction对象,来实现按钮的Style定制(其实也没啥外观可以定制的,就是加粗字体,设置字体颜色). UIAlertController是通过使用其对象方法:addAction:(UIAlertAction *)action;向其添加action对象来添加按钮和处理按钮点击事件的.

2.1 在UIAlertController中添加按钮
首先创建按钮(也就是UIAlertAction),在创建按钮的同时其点击事件也一并确定了.

+ (instancetype)actionWithTitle:(nullable NSString *)title style:(UIAlertActionStyle)style handler:(void (^ __nullable)(UIAlertAction *action))handler; 

Style:根据不同Style的,Title的颜色和字体会有所变化. UIAlertActionStyleDefault = 0, UIAlertActionStyleCancel, UIAlertActionStyleDestructive的样式在上图actionSheet中都有标注.
handler:即所创建action对象的事件Block.当点击所对应的actionButton的时候,Block 被调用. Block 可为空, 返回值为void, 传入对象本身作为参数.最后把定义的action对象 通过alertController对象的addAction方法添加至对象即可. 当alertController的Style为alertStyle的时候,添加action多余三个的时候,会从上之下排列.

代码

//依次创建不同样式的按钮和对应的事件Block,并添加到alertController对象上.
    UIAlertAction* actionDefault = [UIAlertAction actionWithTitle:@"Default" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"titleOne is pressed");
    }];
    
    UIAlertAction* actionDestructive = [UIAlertAction actionWithTitle:@"Destructive" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"titleTwo is pressed");
    }];
    
    UIAlertAction* actionCancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"titleThree is pressed");
    }];
    [self.alertVC addAction:actionDefault];
    [self.alertVC addAction:actionDestructive];
    [self.alertVC addAction:actionCancel]; 

显示结果:

不同样式的action

  1. 添加输入框
- (void)addTextFieldWithConfigurationHandler:(void (^ __nullable)(UITextField *textField))configurationHandler;
@property (nullable, nonatomic, readonly) NSArray<UITextField *> *textFields; 

通过上面的方法可以在alertController上面添加一个输入框, 需要一个Block 参数.该Block类型也有一个参数.为当前添加的textField.
这是一个配置textField的Block,不可以在该Block中获取textField中的值.可以向其中添加多个textField,在alertController中有一个数组,通过这个数组,我们可以获取添加到alertController上面的textField;
textField数组:

@property (nullable, nonatomic, readonly) NSArray<UITextField *> *textFields; 
  • 向alertController上添加textFields.
    代码
 [_alertVC addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        // This is Configure Handler Block Just For textField's Configuration after call this method...
        textField.text = @"hello";
        //不要在这里面做一些,获取textField内容的操作,像这样
//        NSLog(@"%@",textField.text);//禁止这样做.这是一个配置Block.
    }]; 

我们可以在上面的Default按钮点击的时候,获取textField.

UIAlertAction* actionDefault = [UIAlertAction actionWithTitle:@"Default" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"textField text is %@",[_alertVC.textFields firstObject].text);
    }]; 

显示结果:

显示输入框,输入框中的值是配置的,当点击Default按钮时会log:hello

动手试了试,只能向alertStyle 类型的alertController添加输入框.alertController提供的接口很少,最近用alertView总是报警告,详细的把alertController的看了一遍.还是用官方推荐的.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS UIAlertController 用法介绍 的相关文章

  • momentjs 常用总结

    平时在工作中经常需要对时间进行处理 xff0c 用momentjs 可以快速又方便的对时间格式进行处理 1 let time 61 moment 输出当前国际化时间 相当于 newDate 2 let time 61 moment X fo
  • 第一次CSP模拟-A-咕咕东的奇遇

    咕咕东是个贪玩的孩子 xff0c 有一天 xff0c 他从上古遗迹中得到了一个神奇的圆环 这个圆环由字母表组成首尾相接的环 xff0c 环上有一个指针 xff0c 最初指向字母a 咕咕东每次可以顺时针或者逆时针旋转一格 例如 xff0c a
  • week4作业-C-TT的神秘礼物

    TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT 任务内容是
  • UIScrollView的作用原理,实现scrollView传递touch事件给子视图

    span style font family none 我们知道当多个视图进行叠加的时候 xff0c touch事件是作用到最上面的视图上 xff0c 但是如果父视图是UIScrollView xff0c 如果默认 xff0c 可能touc
  • win10虚拟机VMware安装homeassistant镜像

    从今天开始 xff0c 我开始倒腾智能家居 xff0c 谈到智能家居就离不开一个开源的家庭智能控制系统home assistant 这个home assistant可以连接很多智能设备 之后 xff0c 我也会把自己在这过程中学习到的东西或
  • hadoop集群环境搭建

    目录 思路 配置master服务器 配置slave服务器 启动 运行example 常见报错 多次初始化导致master和slave的clusterID的不一致 INFO mapreduce Job Running job job 1647
  • zookeeper集群环境搭建

    目录 第一台主机 其他两台主机 启动 常见报错 Starting zookeeper FAILED TO START 3台Linux虚拟机 xff0c 与 hadoop环境搭建 相同 第一台主机 1 下载安装包 在 Index of apa
  • HBase分布式环境搭建

    目录 第一台主机 其他两台主机 启动 常见报错 SLF4J Class path contains multiple SLF4J bindings 3台Linux虚拟机 xff0c 与 zookeeper环境搭建 相同 xff0c 承接上文
  • Linux报错集锦

    收录平时使用linux时遇到的各种报错 xff0c 方便以后查阅 xff0c 如果大家遇到同样的问题时也能节省一些时间 原文链接 xff08 会有更新 xff09 https thrilling coffee afc notion site
  • 【20200602程序设计思维与实践 Week15 作业】

    目录 B ZJM 与生日礼物题意思路代码 C ZJM 与纸条题意思路代码 B ZJM 与生日礼物 题意 ZJM收到了Q老师送来的生日礼物 xff0c 但是被 Q老师加密了 只有 ZJM 能够回答对Q老师的问题 xff0c Q老师才会把密码告
  • 宝塔Linux搭建靶场(DVWA,pikachu,sqli,upload,xxs)

    靶场下载地址 链接 xff1a https pan baidu com s 1acxeSoI8TcvGXEGOa0a3WA 提取码 xff1a nbxx 安装宝塔Linux环境 Ubuntu安装宝塔Linux命令wget O install
  • anaconda中通过pytesseract识别中文字符

    使用pytesseract识别中文字符 环境的安装可以参考 xff1a https editor csdn net md articleId 61 109255325 首先 xff0c 需要下载相应的数据集 xff0c 可以自行搜索官网 x
  • (3)PCIE中断简介(学无止境)

    1 引言 FPGA与CPU进行数据交互时 xff0c 一般需要进行DMA操作 xff0c 包括读DMA和写DMA操作 读 写DMA一些控制信号一般需要通过中断的方式实现 xff1b 例如 xff1a DMA开始 DMA结束等 2 PCIE中
  • MySQL:ERROR 1193 (HY000): Unknown system variable ‘validate_password_policy‘的解决方法

    当我们设置数据库密码级别的时候 mysql gt set global validate password policy 61 0 mysql gt set global validate password length 61 4 出现这样
  • window下使用ssh以及配置免密登录

    因为最近的项目需要部署到多台服务器上 xff0c 如果一台一台的去操作的话 xff0c 显然太费时费力了 xff0c 由于公司又没有一整套完整的发布部署平台 xff0c 所以我就自己写了个批处理脚本来实现项目的部署以及日志的拉取 xff0c
  • Python包和模块安装源,以及切换三方安装源方法

    Python包托管网站 xff1a PyPI The Python Package Index Python官方 xff1a https pypi python org simple 服务器在国外 xff0c 国内访问很慢 豆瓣 xff1a
  • Vscode开发stm32、esp32、8266等硬件开发环境(platformIO+cubeMX)(使用mac作硬件开发)

    作为一名物联网工程的学生 xff0c 硬件开发必不可少 但绝大多数硬件ide都是为windows准备的 这次来使用vscode进行开发硬件 1 vscode开发优势 xff1a 界面美观 代码补齐 不改代码的前提下减少重复重复编译而直接上传
  • Microsoft Edge提示浏览器不兼容问题解决

    今天早上来开电脑提示Microsoft Edge提示浏览器不兼容问题 xff0c 点击任何地方都没作用 xff0c 用了方法一还是没解决 xff0c 然后用了方法二 xff0c 问题解决了 方法一 xff1a 更改注册表 Win 43 R打
  • P1825 [USACO11OPEN]Corn Maze S

    链接 xff1a P1825 USACO11OPEN Corn Maze S 思路 1 输入地图 xff0c 寻找起始点 2 起始点入队 xff0c 扩展 3 判断是否找到终点 4 判断是否进入穿越点 xff08 函数 xff09 源码 s
  • 期末复习——基础题集 pta c语言

    5 7 本题目用指针变量输入 输出数组arrA的元素值 span class token macro property span class token directive keyword include span span class t

随机推荐