UIAlertView类创建一个简单的模态提醒窗口,可能包含消息、按钮以及文本框。模态UI元素要求用户必须与之交互(通常是按下按钮)后才能做其它事情。它们通常位于其他窗口前面,在可见时禁止用户与其他任何界面元素交互。

UIAlertView的初始化代码如下:

- (void)testAlert
{
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"系统警告"
message:@"您的电量不足,将在10分钟后关机"
delegate:nil
cancelButtonTitle:@"好"
otherButtonTitles:nil];
alertView.alertViewStyle = UIAlertViewStyleDefault;
[alertView show];
}

调用该方法后,会产生如下界面:

参数说明:
initWithTitle --- 初始化提醒视图并设置出现在提醒视图顶端的标题。
message --- 详细文本描述
delegate --- 用来响应提醒的对象。如果不需要执行任何操作,可设置为nil
cancelButtonTitle --- 视图中默认按钮的标题
otherButtonTitles --- 视图中额外按钮的标题,是一个数组,以nil结尾

alertView.alertViewStyle用来定义提醒视图的外观,有4种方案可供选择:
UIAlertViewStyleDefault --- 没有设置样式时默认采用的样式,不包含输入文本框
UIAlertViewStylePlainTextInput --- 添加一个常规输入文本框
UIAlertViewStyleSecureTextInput --- 添加一个安全(密码)文本框
UIAlertViewStyleLoginAndPasswordInput --- 添加一个常规文本框和密码文本框

需要着重了解的是delegate这个参数,它指明了由哪个类来响应用户的操作或读取文本框的内容。响应类必须遵守协议UIAlertViewDelegate并实现方法alertView:clickedButtonAtIndex,一般会指定为self。

首先在类的头文件(.h)里声明为遵守UIAlertViewDelegate协议

@interface ViewController : UIViewController <UIAlertViewDelegate>

然后实现方法alertView:clickedButtonAtIndex

- (IBAction)testUIAlertView:(id)sender
{
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"新版本提示"
message:@"该程序有一个新版本,是否升级?"
delegate:self
cancelButtonTitle:@"忽略"
otherButtonTitles:@"现在升级", nil];
[alertView show];
} - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"点击按钮的索引是:%d,标题是:%@",buttonIndex,[alertView buttonTitleAtIndex:buttonIndex]);
if([alertView.title isEqualToString:@"Input your Email"])
{
NSLog(@"这个窗口是Email输入提示!");
}
}

buttonTitleAtIndex方法是根据按钮的索引来取得按钮的标题。假如提醒框里含有输入框,则可以用textFieldAtIndex来获得该TextField实例,例如:

[[alertView textFieldAtIndex:] text];

也可以自定义一个类来作为UIAlertView实例的delegate,一样的先声明为遵守UIAlertViewDelegate协议,然后将delegate设置为新建类的实例就可以了。但有一点一定要注意,在启用ARC后,实例变量的生存周期只存在于所属方法内部,这里是一个按钮的点击动作,当点击按钮弹出提醒框后,该代理类的引用已经被自动清除掉了,所以当你视图去点击提醒框按钮来触发alertView:clickedButtonAtIndex方法,会出现错误。这里最简单的解决方法是将变量声明为全局变量。下面的例子演示了这个问题:

MyDelegate *delegate;

- (IBAction)testUIAlertView:(id)sender
{
//MyDelegate *delegate = [MyDelegate alloc]; //注意,这样写有问题! delegate = [MyDelegate alloc]; UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"新版本提示"
message:@"该程序有一个新版本,是否升级?"
delegate:delegate
cancelButtonTitle:@"忽略"
otherButtonTitles:@"现在升级", nil];
[alertView show];
}

创建模态提醒窗口(UIAlertView)的更多相关文章

  1. 使用jQuery创建模态窗口登陆效果

    日期:2013-8-22  来源:GBin1.com 隐藏模态窗口技术是一种很好的解决方案,用于处理不是特有必要出现在网页上的界面元素.社交网络可以使用模态窗口传达私人讯息以及只针对会员才能看 到的表 ...

  2. (面试题)html中创建模态窗口的方法有哪些?

    一.创建模态和非模态对话框除了alert(""); confirm(""); prompt("");之外还有创建模态对话框:vReturnV ...

  3. [Win32]创建模态窗口

    http://www.cnblogs.com/zplutor/archive/2011/02/20/1958973.html 在Win32编程中,如果要显示一个模态窗口,一般是先创建对话框模板,然后使 ...

  4. vc创建模态和非模态对话框

    模态对话框的创建 创建模态对话框需要调用CDialog类的成员函数:DoModal,该函数的功能就是创建并显示一个模 态对话框,关闭模态对话框的函数是EndDialog,该函数需要一个参数,这个参数就 ...

  5. Sessions, Window Stations and Desktops(GetDesktopWindow函数得到的桌面句柄, 是Csrss.exe创建的一个窗口)

    由于不是搞安全的,对这块的东西一直不是很清楚,今天特意整理下. 总的来说,他们的关系如下: 我们知道Windows是支持多用户的,Session可以理解为每个用户登录,比如当前登录和远程登陆.Wind ...

  6. QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例

    QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例 部分代码: // 创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束 QMenu *pDialog = mBar->ad ...

  7. OpenGL 使用GLFW创建全屏窗口

    OpenGL 使用GLFW创建全屏窗口 GLFW库里面的glfwCreateWindow()函数是用来创建窗口的函数. 这样函数的原型是: GLFWwindow* glfwCreateWindow(i ...

  8. Windows 10 应用创建模糊背景窗口的三种方法

    原文 Windows 10 应用创建模糊背景窗口的三种方法 现代的操作系统中创建一张图片的高斯模糊效果非常容易,不过如果要在窗口中获得模糊支持就需要操作系统的原生支持了.iOS/Mac 和 Windo ...

  9. Python测试开发-创建模态框及保存数据

    Python测试开发-创建模态框及保存数据 原创: fin  测试开发社区  前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎 ...

随机推荐

  1. CF540 D 概率 DP

    石头剪刀布三种生物(?) 随机战斗,最后三方各自只有自己方存活下来的概率是多少. 局面的转移明显,注意任选两方决定战斗时有可能出现选了同个种类的,因此注意排除掉同种的组合,也就是条件概率什么的. /* ...

  2. Js冒泡事件详解及阻止

    Js冒泡机制是指如果某元素定义了事件A,如click事件,如果触发了事件之后,没有阻止冒泡事件,那么事件将向父级元素传播,触发父类的click函数. 如下例所示: <html>     & ...

  3. javascript操作对象的方法

    with 确定某个对象的作用区域,在with代码段内的次对象的属性或方法可以直接使用. 例: //比如stu中有name,age属性和walk方法 with(stu) { alert(name+&qu ...

  4. 关于Http协议、ASP.NET 核心知识(2)

    简介HTTP (对于http协议的描述我前部分有写,但基于保证文档独立完整性的原则,我再写一遍.反正又不花钱.) 这货的学名叫:超文本传输协议 英文名字:(HTTP,HyperText Transfe ...

  5. placeholder样式设置

    在input框中有时想将输入的字和placeholder设为不同的颜色或其它效果,这时就可以用以下代码来对placeholder进行样式设置了. ::-webkit-input-placeholder ...

  6. UVA - 10494 If We Were a Child Again

    用java写的大数基本操作,java要求的格式比较严谨. import java.util.*; import java.math.*; public class Main { public stat ...

  7. NYOJ 93 汉诺塔 (数学)

    题目链接 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片 ...

  8. Javascript装饰器的妙用

    最近新开了一个Node项目,采用TypeScript来开发,在数据库及路由管理方面用了不少的装饰器,发觉这的确是一个好东西.装饰器是一个还处于草案中的特性,目前木有直接支持该语法的环境,但是可以通过 ...

  9. struts的标签

    <%@ taglib uri="/struts-tags" prefix="s"%> <%@ taglib uri="/WEB-IN ...

  10. Perl6多线程3: Promise start / in / await

    创建一个Promise 并自动运行: my $p = Promise.start({say 'Hello, Promise!'}); 如果把代码改成如下, 我们会发现什么也没打印: ;say 'Hel ...