• 创建模态提醒窗口(UIAlertView)


    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:0] 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];
    }
  • 相关阅读:
    ABP 框架第一篇 ABP框架入门
    SpringBoot+mybatis plus 框架搭建
    诺依框架 第一章 springboot+vue前后端分离版本部署
    常用Web Service汇总网页
    Singleton单例模式
    告别无止境的增删改查Java代码生成器
    Builder生成器模式
    细说Java IO相关
    AbstractFactory抽象工厂模式
    设计模式关于模式的一些很基本的知识点
  • 原文地址:https://www.cnblogs.com/CoderWayne/p/3596734.html
Copyright © 2020-2023  润新知