iOS自定义提示弹出框实现类似UIAlertView的效果

下面我就来详细讲解一下“iOS自定义提示弹出框实现类似UIAlertView的效果”的完整攻略。

第一步:创建一个背景视图

我们首先需要创建一个背景视图,用于展示提示弹出框。可以使用UIView或者UIControl来实现,具体代码如下:

UIView *bgView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
bgView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
[[UIApplication sharedApplication].keyWindow addSubview:bgView];

在以上代码中,我们创建了一个UIView对象,设置了它的frame为屏幕大小,并设置了它的背景颜色为灰色半透明。最后将这个背景视图添加到主窗口上。

第二步:创建一个提示弹出框

接下来,我们需要在背景视图上创建一个提示弹出框。可以使用UIView来实现,具体代码如下:

UIView *alertView = [[UIView alloc] initWithFrame:CGRectMake(50, 200, [UIScreen mainScreen].bounds.size.width - 100, 200)];
alertView.backgroundColor = [UIColor whiteColor];
alertView.layer.cornerRadius = 10;
bgView.userInteractionEnabled = YES;
[bgView addSubview:alertView];

在以上代码中,我们创建了一个UIView对象,设置了它的frame为屏幕宽度-100,高度为200,居中显示。并将其背景颜色设置为白色,圆角设置为10,并且将其添加到背景视图上。

第三步:添加提示信息

接下来,我们需要向提示弹出框中添加提示信息,可以使用UILabel来实现,具体代码如下:

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, alertView.bounds.size.width - 20, 30)];
titleLabel.text = @"提示信息";
titleLabel.textAlignment = NSTextAlignmentCenter;
[alertView addSubview:titleLabel];

UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(titleLabel.frame) + 10, alertView.bounds.size.width - 20, 60)];
messageLabel.text = @"这是一个自定义提示弹出框的示例";
messageLabel.textAlignment = NSTextAlignmentCenter;
[alertView addSubview:messageLabel];

在以上代码中,我们分别创建了两个UILabel对象,用于展示标题和提示信息。并且将它们添加到提示弹出框中。

第四步:添加按钮

最后一步,我们需要向提示弹出框中添加按钮,用于用户的操作。可以使用UIButton来实现,具体代码如下:

UIButton *cancelButton = [[UIButton alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(messageLabel.frame) + 10, alertView.bounds.size.width / 2 - 20, 40)];
[cancelButton setTitle:@"取消" forState:UIControlStateNormal];
cancelButton.backgroundColor = [UIColor redColor];
[cancelButton addTarget:self action:@selector(cancelButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[alertView addSubview:cancelButton];

UIButton *okButton = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMaxX(cancelButton.frame) + 20, CGRectGetMaxY(messageLabel.frame) + 10, alertView.bounds.size.width / 2 - 20, 40)];
[okButton setTitle:@"确定" forState:UIControlStateNormal];
okButton.backgroundColor = [UIColor greenColor];
[okButton addTarget:self action:@selector(okButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[alertView addSubview:okButton];

在以上代码中,我们创建了两个UIButton对象,用于展示“取消”和“确定”按钮,并且将它们添加到提示弹出框中。同时我们也为按钮添加了点击事件,分别为cancelButtonClicked:和okButtonClicked:。

至此,我们的自定义提示弹出框已经实现了。可以根据实际需要进行调整和修改。

下面提供两个示例:

示例一:展示一个警告框,并打印用户的操作结果

UIView *bgView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
bgView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
[[UIApplication sharedApplication].keyWindow addSubview:bgView];

UIView *alertView = [[UIView alloc] initWithFrame:CGRectMake(50, 200, [UIScreen mainScreen].bounds.size.width - 100, 200)];
alertView.backgroundColor = [UIColor whiteColor];
alertView.layer.cornerRadius = 10;
bgView.userInteractionEnabled = YES;
[bgView addSubview:alertView];

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, alertView.bounds.size.width - 20, 30)];
titleLabel.text = @"警告";
titleLabel.textAlignment = NSTextAlignmentCenter;
[alertView addSubview:titleLabel];

UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(titleLabel.frame) + 10, alertView.bounds.size.width - 20, 60)];
messageLabel.text = @"确定删除该文件吗?";
messageLabel.textAlignment = NSTextAlignmentCenter;
[alertView addSubview:messageLabel];

UIButton *cancelButton = [[UIButton alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(messageLabel.frame) + 10, alertView.bounds.size.width / 2 - 20, 40)];
[cancelButton setTitle:@"取消" forState:UIControlStateNormal];
cancelButton.backgroundColor = [UIColor redColor];
[cancelButton addTarget:self action:@selector(cancelButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[alertView addSubview:cancelButton];

UIButton *okButton = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMaxX(cancelButton.frame) + 20, CGRectGetMaxY(messageLabel.frame) + 10, alertView.bounds.size.width / 2 - 20, 40)];
[okButton setTitle:@"确定" forState:UIControlStateNormal];
okButton.backgroundColor = [UIColor greenColor];
[okButton addTarget:self action:@selector(okButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[alertView addSubview:okButton];

- (void)cancelButtonClicked:(UIButton *)sender {
    [sender.superview.superview removeFromSuperview];
    NSLog(@"用户取消了删除操作");
}

- (void)okButtonClicked:(UIButton *)sender {
    [sender.superview.superview removeFromSuperview];
    NSLog(@"用户确定了删除操作");
}

示例二:展示一个输入框,并保存用户输入的内容

UIView *bgView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
bgView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
[[UIApplication sharedApplication].keyWindow addSubview:bgView];

UIView *alertView = [[UIView alloc] initWithFrame:CGRectMake(50, 200, [UIScreen mainScreen].bounds.size.width - 100, 200)];
alertView.backgroundColor = [UIColor whiteColor];
alertView.layer.cornerRadius = 10;
bgView.userInteractionEnabled = YES;
[bgView addSubview:alertView];

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, alertView.bounds.size.width - 20, 30)];
titleLabel.text = @"输入信息";
titleLabel.textAlignment = NSTextAlignmentCenter;
[alertView addSubview:titleLabel];

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(titleLabel.frame) + 10, alertView.bounds.size.width - 20, 40)];
textField.placeholder = @"请输入内容";
textField.borderStyle = UITextBorderStyleRoundedRect;
[alertView addSubview:textField];

UIButton *cancelButton = [[UIButton alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(textField.frame) + 10, alertView.bounds.size.width / 2 - 20, 40)];
[cancelButton setTitle:@"取消" forState:UIControlStateNormal];
cancelButton.backgroundColor = [UIColor redColor];
[cancelButton addTarget:self action:@selector(cancelButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[alertView addSubview:cancelButton];

UIButton *okButton = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMaxX(cancelButton.frame) + 20, CGRectGetMaxY(textField.frame) + 10, alertView.bounds.size.width / 2 - 20, 40)];
[okButton setTitle:@"确定" forState:UIControlStateNormal];
okButton.backgroundColor = [UIColor greenColor];
[okButton addTarget:self action:@selector(okButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[alertView addSubview:okButton];

- (void)cancelButtonClicked:(UIButton *)sender {
    [sender.superview.superview removeFromSuperview];
}

- (void)okButtonClicked:(UIButton *)sender {
    NSString *inputText = [(UITextField *)(sender.superview.subviews[1]) text];
    NSLog(@"用户输入的内容为:%@", inputText);
    [sender.superview.superview removeFromSuperview];
}

以上就是“iOS自定义提示弹出框实现类似UIAlertView的效果”的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iOS自定义提示弹出框实现类似UIAlertView的效果 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • flex 简单跑马灯效果(竖着显示)

    flex 简单跑马灯效果(竖着显示) 在网页设计中,跑马灯效果是一种常用的展示方式之一。通过滚动内容,可以吸引用户的注意力,从而更好地展示信息。本文将介绍如何使用flex布局实现一个简单的跑马灯效果,将内容竖直滚动展示。 准备工作 在开始编写代码前,我们需要准备一些环境。在本例中,我们需要一个容器和若干个子元素。容器采用flex布局,并设置为竖直方向。子元素…

    其他 2023年3月28日
    00
  • Win10修改文件后缀名(扩展名)来解决一些小问题

    Win10修改文件后缀名(扩展名)来解决一些小问题攻略 有时候,我们可能会遇到一些小问题,例如无法打开特定类型的文件或者文件无法正确识别。在这种情况下,修改文件的后缀名(也称为扩展名)可能是解决问题的一种简单方法。下面是Win10修改文件后缀名的完整攻略,包括两个示例说明。 步骤1:显示文件扩展名 在开始修改文件后缀名之前,我们需要确保Windows 10显…

    other 2023年8月5日
    00
  • windowsacl是什么

    以下是“Windows ACL是什么”的完整攻略: Windows ACL是什么? Windows ACL(Access Control List)是一种用于控制Windows文件和文件夹访问权限的机制。ACL是一组规则,用于哪些用户或组可以访问文件或文件夹,以及可以执行哪些操作。本攻略中,我们将介绍Windows ACL的基本概念和如何使用它来控制文件和文…

    other 2023年5月7日
    00
  • cm是什么单位?

    cm是长度单位之一,全称为“厘米”,是国际单位制中的一个基本单位。1厘米等于0.01米,是我们日常生活中经常使用的单位之一。 在Markdown中,可以使用行内代码块 cm 来表示这个单位。如果需要在文本中直接输入数字和单位,则可以使用HTML标签<sub>表示下标,例如1cm。 示例1:计算人物身高 小明身高165cm,要描述他的身高,可以使用…

    其他 2023年4月16日
    00
  • VMWare复制CentOS虚拟机后无法联网的问题解决方案

    下面我将详细讲解“VMWare复制CentOS虚拟机后无法联网的问题解决方案”的完整攻略: 问题描述 在 VMWare 上复制 CentOS 虚拟机后,新虚拟机无法联网。 解决方案 出现这种情况的原因很可能是因为虚拟网卡的 MAC 地址与系统中存在的 MAC 地址重复所致,因此需要修改虚拟机中的 MAC 地址。具体步骤如下: 关闭虚拟机,并在 VMWare …

    other 2023年6月26日
    00
  • 通过sql语句将blob里的char取出来转成数字保存在其它字段

    要将 blob 字段中的 char 类型数据转换成数字类型并保存在其它字段中,我们可以使用以下步骤: 在数据库表中新建一个列,用于保存转换后的数字。 通过 SQL 语句查询表中 blob 字段的数据,并使用 CAST 函数将其转换成 char 类型。 将 char 类型数据转换成数字,并用 UPDATE 语句将其存入新建的列中。 以下是两条示例说明: 假设我…

    other 2023年6月25日
    00
  • WPF自定义路由事件的实例教程

    WPF自定义路由事件的实例教程 什么是WPF自定义路由事件 在WPF中,路由事件是一种事件路由方式,它可以让事件沿着逻辑树传递,从而到达触发事件的元素树的根目录。相比起普通的事件,路由事件具有更强大的扩展性。 WPF自定义路由事件就是利用路由事件机制,创建一个自定义的路由事件。 自定义路由事件的步骤 第一步:创建自定义路由事件的类 首先,我们需要创建一个继承…

    other 2023年6月25日
    00
  • 逆转交替合并两个链表的解析与实现

    逆转交替合并两个链表是一种常见的链表操作,该操作的意义在于将两个链表中的节点按照交替顺序进行组合,并将最终的结果链表逆序排列。下面是逆转交替合并两个链表的解析与实现的详细攻略: 解析 假设我们要对以下两个链表进行逆转交替合并: 链表1:1 -> 2 -> 3 -> 4 -> NULL链表2:5 -> 6 -> 7 -&gt…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部