【iOS】UI——关于UIAlertController类

news2024/11/16 2:15:44

目录

  • 前言
  • 关于UIAlertController
  • 具体操作及代码实现
  • 总结

前言

  在UI学习中,我们发现UIAlertView在iOS 9中已经被废弃,我们找到UIAlertController来代替UIAlertView实现弹出框的功能,从而有了这篇关于UIAlertController的学习笔记。

关于UIAlertController

  UIAlertController 是 iOS SDK 中提供的一个强大且灵活的类,它可以用来显示警告框或者动作表。UIAlertController 取代了早期的 UIAlertView 和 UIActionSheet 类,提供了更加统一和灵活的界面。

具体操作及代码实现

//创建一个UIAlertController对象
//P1:弹出框的标题  P2弹出框的内容  
//P3:弹出的警告框的样式为UIAlertControllerStyleAlert(即中心弹出的警告框)
UIAlertController* alertController = [UIAlertController alertControllerWithTitle:@"标题" message:@"这是消息" preferredStyle:UIAlertControllerStyleAlert];

//添加“确认”动作按钮到控制器上
//P1:标题文字  P2:动作样式,有三种动作样式:常规(default)、取消(cancel)以及警示(destruective)
//P3:用户选中并点击该动作时,所执行的代码
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    // 用户点击确认按钮后执行的代码
}];
//将动作按钮添加到alertController视图上
[alertController addAction:defaultAction];

//添加“取消”动作按钮到控制器上
UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
    // 用户点击取消按钮后执行的代码
}];
//将动作按钮添加到alertController视图上
[alertController addAction:cancelAction];

//将警告框显示出来
[self presentViewController:alertController animated:YES completion:nil];

  这个示例创建了一个 UIAlertController,并设置了标题、消息以及样式。然后,我们创建了两个 UIAlertAction,一个是默认的操作,另一个是取消操作(有三种动作样式:常规(default)、取消(cancel)以及警示(destruective))。这两个操作都有处理器,所以当用户点击这些按钮时,会执行相应的代码块。最后,我们使用 presentViewController:animated:completion: 方法来显示警告框。

  将以上代码放进xcode的"ViewController.h"文件的viewDidLoad函数中,运行后你会发现,模拟器屏幕上无任何显示,这是因为:

在 iOS 开发中,警告对话框(UIAlertController)不能直接被呈现,必须在某个存在的视图控制器(UIViewController)上呈现。这是因为UIAlertController实际上是一个视图控制器,而所有的视图控制器都需要一个父视图控制器才能被用户看到。

  为了看到警告框的效果,我们另外创建一个UIButton对象,用来触发警告框。

UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(100, 100, 80, 80);
    btn.backgroundColor = [UIColor cyanColor];
    [self.view addSubview:btn];
    
    [btn addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];

将UIAlertController相关操作放在btn的press函数里即可。完整代码如下:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    
    UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(100, 100, 80, 80);
    btn.backgroundColor = [UIColor cyanColor];
    [self.view addSubview:btn];
    
    [btn addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];
}

- (void) press {
    //创建一个UIAlertController对象
    //P1:弹出框的标题  P2弹出框的内容
    //P3:弹出的警告框的样式为UIAlertControllerStyleAlert(即中心弹出的警告框)
    UIAlertController* alertController = [UIAlertController alertControllerWithTitle:@"标题" message:@"这是消息" preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:nil];
    [alertController addAction:defaultAction];
    
    UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    [alertController addAction:cancelAction];
    
    [self presentViewController:alertController animated:YES completion:nil];
}

@end

按下btn按钮后的运行结果:
在这里插入图片描述

总结

  当我们需要显示一个警告对话框时,我们要在当前的视图控制器上呈现它;如果当前不在视图控制器中,但是需要显示警告对话框,我们需要获取到当前的视图控制器,或者创建一个新的视图控制器来呈现警告对话框。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1788914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于websocket与node搭建简易聊天室

一、前言 上一篇文章介绍了websocket的详细用法与工具类的封装,本篇就基于websocket搭建一个简易实时的聊天室。 在本篇开始之前也可以去回顾一下websocket详细用法:WebSocket详解与封装工具类 二、基于node搭建后台websocket服务 首先确认本机电脑中…

手机录屏怎么没有声音?一键排查,轻松解决!

“手机录屏怎么没有声音?今天录制了一个线上的音乐会,结束的时候发现完全没有声音,我检查了手机的设置,录屏功能看起来是正常的,但为什么就是录不到声音呢?希望大家能帮我解答这个疑惑。” 随着智能手机的…

linux上VirtualBox使用

前言 最近想把唯一的windows系统装成linux, 但是确实存在一些特殊软件无法舍弃,所有装完linux需要用虚拟机装个windows 上来使用特定的一些软件(不想用wine了)。 还有对一些特定usb设备的透传,这样才能保证在虚拟机中…

数据库开发-Mysql03

目录 1. 多表查询 1.1 概述 1.1.1 数据准备 1.1.2 介绍 1.1.3 分类 1.2 内连接 1.3 外连接 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 1.5 案例 2. 事务 2.1 介绍 2.2 操作 2.3 四大特性 3. 索引 3.1 介绍 3…

雷士大路灯有必要买吗?雷士、书客、孩视宝护眼落地灯实测PK!

面对市面上众多的护眼大路灯品牌,其中雷士、书客和孩视宝这几款大路灯受到了广泛的青睐,也是热度比较高的几款产品,正是因为这么多款大路灯,很多伙伴在看到文章推荐后很纠结,不知道如何选择,也有一部分伙伴…

【猫狗识别系统】图像识别Python+TensorFlow+卷积神经网络算法+人工智能深度学习

猫狗识别系统。通过TensorFlow搭建MobileNetV2轻量级卷积神经算法网络模型,通过对猫狗的图片数据集进行训练,得到一个进度较高的H5格式的模型文件。然后使用Django框架搭建了一个Web网页端可视化操作界面。实现用户上传一张图片识别其名称。 一、前言 …

RK3568技术笔记之一 RK3568总体介绍

RK3568是瑞芯微开发出一款很好用的芯片。我先把ROCKCHIP的原厂信息搬过来看看。 首先声明一下,这篇文章里的资讯版权归瑞芯微电子股份有限公司。毕竟是我转过来的嘛。 我自己的心得,版权就归我啦。 搬砖地址Rockchip-瑞芯微电子股份有限公司瑞芯微专注…

day34--Spring(三)

一、AOP 1 AOP简介 问题导入 问题1:AOP的作用是什么? 问题2:连接点和切入点有什么区别,二者谁的范围大? 问题3:请描述什么是切面? 1.1 AOP简介和作用【理解】 AOP(Aspect Oriented Progr…

TSINGSEE青犀视频汇聚机房动环智能监控方案,提升机房安全稳定性

一、背景需求 在当今信息化时代,机房作为数据中心的核心设施,承载着重要的网络设备和数据存储设备,其正常运行对于企业的数据安全和业务连续性至关重要。机房内部设备众多,且运行过程中涉及大量的数据交换和传输。一旦发生安全事…

合并多个h5文件

如图,bbt_frames下有多个视频文件夹,每个文件夹包括多个h5文件,将每个文件夹的h5文件合并成一个h5文件,并以该文件夹命名,存储至video_feature文件夹。 import os import h5py import numpy as npdef merge_h5_files(…

《深入浅出存储引擎》不同数据库背后的数据存储方案

在大数据和AI时代,数据库成为各类应用不可或缺的重要组成部分。而数据库中的数据依赖存储引擎进行管理,包括数据的存储、查询、更新和删除等。因此,在设计系统时,选择正确的数据库存储引擎方案变得尤为重要。这篇文章将以关系型、…

4.5-24V48V60V72V80V降压12V 0.5A 电动车车充USB充电方案芯片IC-H6601

H6601 降压开关转换器是一款为电动车USB充电设计的芯片。这款芯片内置功率MOSFET,具备宽输入工作电压范围(4.5V 至 60V),能够持续输出电流0.5A,并且具有良好的负载和线性调整率。 电流控制模式使环路易稳定&#xff0c…

测试工具fio

一、安装部署 fio是一款优秀的磁盘IO测试工具,在Linux中比较常用于测试磁盘IO 其下载地址:https://brick.kernel.dk/snaps/fio-2.1.10.tar.gz 或者登录其官网:http://freshmeat.sourceforge.net/projects/fio/ 进行下载。 tar -zxvf fio-…

SpringBoot整合Skywalking

下载Java Agent 官网:https://skywalking.apache.org/downloads/ 提示:Agent最好到网上找一找之前的版本,新版本可能有bug,如果出现了并且网上也几乎没有这个版本的解决方法那么就切换之前的版本 本地启动时 -javaagent:d:\opt\…

ABB码垛机器人IRB260通讯板维修

ABB码垛机器人在现代制造业中发挥着重要作用,而机器人通讯板维修对于确保机器人的正常运行至关重要。 通讯板是ABB码垛机器人与控制系统之间进行数据传输的桥梁。它负责接收控制系统的指令,并将机器人的运行数据反馈给控制系统。如果通讯板出现故障&…

郑州永兴牌饲料机械设备厂家

作为专注生产饲料机械设备厂家,郑州永兴不仅拥有完善的生产线和制造工艺,更在技术创新和产品研发方面走在了行业前列。 郑州永兴深知饲料机械设备对于饲料生产的重要性,因此始终坚持以市场需求为导向,不断推陈出新。其生产的饲…

黄金票据~

一. 黄金票据原理 黄金票据一般是伪造的TGT,生成这个TGT,不需要和KDC进行校验,金票可以在本地直接生成,生成的的金票在非域机器和域内机器都可以使用 黄金票据的作用: 可以用来权限维持 可以用来横向移动二. 利用条件 1. 必须…

Docker-compose 编排lnmp(dockerfile) 完成Wordpress

一、部署 Nginx 镜像 1. 建立工作目录 mkdir /opt/lnmp/nginx -pcd /opt/lnmp/nginx#上传 nginx 安装包 nginx-1.12.0.tar.gz#上传 wordpress 服务包 wordpress-4.9.4-zh_CN.tar.gz mkdir /opt/lnmp/nginx/htmltar zxvf wordpress-4.9.4-zh_CN.tar.gz -C /opt/lnmp/nginx/html…

html 使用svg矢量图时无法 调整宽高问题解决,不能像图片一样设置宽高比例问题

引入的路径后加 #svgView(preserveAspectRatio(none)) 具体代码如下 修改前 <img src"/assets/svgs/full_screen_full.svg" class"im"> 修改后 <img src"/assets/svgs/full_screen_full.svg#svgView(preserveAspectRatio(none))" cla…

TypeScript学习(一):开发环境搭建

官方文档搭建参考 https://learn.microsoft.com/zh-cn/training/modules/typescript-get-started/ 1.下载node.js https://nodejs.org/en/download 2.下载vscode https://code.visualstudio.com/ 3.在线ts的测试工具 https://www.typescriptlang.org/play/ 4.下载typescr…