zoukankan      html  css  js  c++  java
  • IOS复习UIActionSheet&UIAlertView

    与前面相同,新建一个Single View Application项目。配置也一样,如下图



    打开chenViewController.m

    在- (void)viewDidLoad添加方法如下

    UIAlertView *alert=[[UIAlertViewalloc]initWithTitle:@"确认上线" message:@"你真的要开始了吗" delegate:self cancelButtonTitle:@"不了"otherButtonTitles:@"真的", nil];
        [alert show];
    添加这里是程序刚启动,视图刚加载的时候运行的,如下图所示

     写到这里,我想到一见事情,但是也不重要,很多人都认为nib和xib是同一个概念,
     
     这是我刚学iOS的时候在Big nerd ranch的书籍iOS programming 3rd edition(iOS编程第三版)上看到的,原话如下(章节是1.2创建界面)

    XIB文件是XML格式的文本文件,用于保存固化后的对象,构建项目时,Xcode会将XIB文件编译成NIB文件,开发者只需维护XIB文件(XIB文件更容易处理),而应用程序使用(NIB文件体积更小,更容易解析)。

     我们点击【不了】和【真的】时候没有正确的事件,都是取消,为了有响应事件,我们在chenViewController.h添加协议<UIAlertViewDelegate>,如下

    #import <UIKit/UIKit.h>
     
    @interface chenViewController : UIViewController<UIAlertViewDelegate>
     
    @end
    然后在chenViewController.m文件中添加方法如下,这是当alert按钮被点击时发生的
    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    在方法里添加代码
    if (buttonIndex==1) {
            UIActionSheet *actionsheet=[[UIActionSheetalloc]initWithTitle:@"想回家"delegate:self cancelButtonTitle:@"返回"destructiveButtonTitle:@"回家"otherButtonTitles:@"南京", nil];
            [actionsheet showInView:self.view];
        }else if (buttonIndex==0){
            NSLog(@"回家去吧");
        }
    做了个判断,上面的cancelButtonTitle:@"不了"otherButtonTitles:@"真的"
    中按钮依次是0和1,如果还有就是2.当点击了1【真的】就会弹出一个UIActionSheet,如下



    如果是0控制台就会输出回家去吧。,这些按钮有其他事件,比如将被点击,等等很多,这个还需要以后多查看官方文档,
    。下面写一下UIActionSheet的点击事件,但是注意的是顺序。
    首先在chenViewController.h添加协议UIActionSheetDelegate,多个协议用逗号隔开
    <UIAlertViewDelegate,UIActionSheetDelegate>
    接着在chenViewController.m中添加方法
    -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
    方法里面添加代码如下
    switch (buttonIndex) {
            case 0:
                NSLog(@"回家");
                break;
            case 1:
                NSLog(@"南京");
                break;
            case 2:
                NSLog(@"返回");
                break;
            default:
                break;
        }
    这次cancelButtonTitle:@"返回"destructiveButtonTitle:@"回家"otherButtonTitles:@"南京"中按钮排序不一样,因为cancelButtonTitle:@"返回"按钮出现在最下面,所以这个按钮序号在最后,其依次是0,1,上面的顺序是2,0,1
    也就是cancelButton后面的destructiveButton是0,otherButton接着是1,cancelButton就是最后一个是2,(如果还有其他的,他就是最后一个otherbutton+1)
    如果忘记了或者不明白可以看控制台来调。


    其实这两个控件用发非常相视。

    想起一句话,学的是思想,技术天天在更新。要想学好,就得学好编程思想。
            2013年8月8日9:46东南大学无锡分校桃园3宿舍106室


    补充内容

     
    //AlertView已经消失处理的事件
     
    -(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
     
    //AlertView即将消失时,处理的事件
     
    -(void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
     
    //AlertView 取消时
     
    -(void)alertViewCancel:(UIAlertView *)alertView
     
    //AlertView已经显示的时候
     
    -(void)didPresentAlertView:(UIAlertView *)alertView
     
    //AlertView即将显示
     
    -(void)willPresentAlertView:(UIAlertView *)alertView
     
    - (void)viewDidLoad {
     
            UILabel *numOfBtn = [[UILabel alloc]initWithFrame:CGRectMake(10.0, 10.0, 30.0, 30.0)];
     
            UILabel *titleOfBtn = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 10.0, 100.0, 30.0)];
     
            UILabel *cancelBtnIndex = [[UILabel alloc]initWithFrame:CGRectMake(200.0, 10.0, 30.0, 30.0)];
     
            UILabel *destructiveBtnIndex = [[UILabel alloc]initWithFrame:CGRectMake(10.0, 50.0, 30.0, 30.0)];
     
            UILabel *firstOtherBtnIndex = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 50.0, 30.0, 30.0)];
     
            UIActionSheet *actionSheetTest = [[UIActionSheet alloc]initWithTitle:@"ActionSheetTest"                                                                         delegate:self                                                                         cancelButtonTitle:@"CancelButton"                                                                          destructiveButtonTitle:@"RedButton"                                                                         otherButtonTitles:@"OtherButton1",@"OtherButton2",nil];
     
            //看actionSheet是否可见,这是一个只读属性
     
            BOOL a = actionSheetTest.visible;
     
            NSLog(@"%d",a);
     
            //不考虑指定索引的按钮的动作,可以设置是否有动画
     
            [actionSheetTest dismissWithClickedButtonIndex:0 animated:NO];
     
            //设置标题
     
            actionSheetTest.title = @"ActionSheetTitle";
     
            //通过给定标题添加按钮
     
            [actionSheetTest addButtonWithTitle:@"addButtonWithTitle"];
     
            //按钮总数
     
            numOfBtn.text = [NSString stringWithFormat:@"%d",actionSheetTest.numberOfButtons];
     
            //获取指定索引的标题
     
            titleOfBtn.text = [actionSheetTest buttonTitleAtIndex:4];
     
            //获取取消按钮的索引
     
            cancelBtnIndex.text = [NSString stringWithFormat:@"%d",actionSheetTest.cancelButtonIndex];
     
            //获取红色按钮的索引
     
            destructiveBtnIndex.text = [NSString stringWithFormat:@"%d",actionSheetTest.destructiveButtonIndex];
     
            //获取第一个其他按钮的索引
     
            firstOtherBtnIndex.text = [NSString stringWithFormat:@"%d",actionSheetTest.firstOtherButtonIndex];
     
            //设置actionSheet出现的方式
     
            [actionSheetTest showInView:self.view];//or [actionSheetTest showFromTabBar:] or [actionSheetTest showFromToolBar:]
     
            [self.view addSubview:numOfBtn];
     
            [self.view addSubview:titleOfBtn];
     
            [self.view addSubview:cancelBtnIndex];
     
            [self.view addSubview:destructiveBtnIndex];
     
            [self.view addSubview:firstOtherBtnIndex];
     
            [actionSheetTest release];
     
            [numOfBtn release];
     
            [titleOfBtn release];
     
            [cancelBtnIndex release];
     
            [destructiveBtnIndex release];
     
            [firstOtherBtnIndex release];
     
            [super viewDidLoad];
     
    }
    这个方法现在已经淘汰了
     
    - (void)viewDidUnload {
     
    }
    这个方法使用arc后也不需要了,(我一直没使用,但是别人博客经常看到)
     
    - (void)dealloc {
     
            [super dealloc];
     
    }
     
    #pragma mark -- UIActionSheetDelegate --
     
    //根据被点击按钮的索引处理点击事件
     
    - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
     
            NSLog(@"clickedButtonAtIndex:%d",buttonIndex);
     
    }
     
    //ActionSheet已经消失时
     
    - (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
     
            NSLog(@"didDismissWithButtonIndex:%d",buttonIndex);
     
    }
     
    //ActionSheet即将消失时
     
    - (void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex {
     
            NSLog(@"willDismissWithButtonIndex:%d",buttonIndex);
     
    }
     
    //
     
    - (void)actionSheetCancel:(UIActionSheet *)actionSheet {
     
            NSLog(@"actionSheetCancel");  
     
              
     
    }  
     
    //ActionSheet已经显示时  
     
    - (void)didPresentActionSheet:(UIActionSheet *)actionSheet {  
     
            NSLog(@"didPresentActionSheet%@",actionSheet);  
     
    }  
     
    //ActionSheet即将显示时  
     
    - (void)willPresentActionSheet:(UIActionSheet *)actionSheet {  
     
            NSLog(@"willPresentActionSheet%@",actionSheet);  
     
    }  
     
     
     
    @end  
     
    - (void)viewDidLoad {
     
            //初始化AlertView
     
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"AlertViewTest"
     
                                                              message:@"message"
     
                                                              delegate:self
     
                                                              cancelButtonTitle:@"Cancel"
     
                                                              otherButtonTitles:@"OtherBtn",nil];
     
            //设置标题与信息,通常在使用frame初始化AlertView时使用
     
            alert.title = @"AlertViewTitle";
     
            alert.message = @"AlertViewMessage";
     
        
     
            //这个属性继承自UIView,当一个视图中有多个AlertView时,可以用这个属性来区分
     
            alert.tag = 0;
     
        
     
            //只读属性,看AlertView是否可见
     
            NSLog(@"%d",alert.visible);
     
        
     
            //通过给定标题添加按钮
     
            [alert addButtonWithTitle:@"addButton"];
     
        
     
            //按钮总数
     
            NSLog(@"numberOfButtons:%d",alert.numberOfButtons);
     
        
     
            //获取指定索引的按钮的标题
     
            NSLog(@"buttonTitleAtIndex:%@",[alert buttonTitleAtIndex:2]);
     
        
     
            //获得取消按钮的索引
     
            NSLog(@"cancelButtonIndex:%d",alert.cancelButtonIndex);
     
        
     
            //获得第一个其他按钮的索引
     
            NSLog(@"firstOtherButtonIndex:%d",alert.firstOtherButtonIndex);
     
        
     
            //显示AlertView
     
            [alert show];
     
        
     
            [alert release];
     
            [super viewDidLoad];
     
    }
     
    #pragma mark  -- UIAlertViewDelegate --
     
    //根据被点击按钮的索引处理点击事件
     
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
     
            NSLog(@"clickedButtonAtIndex:%d",buttonIndex);
     
    }
     
    //AlertView已经消失时
     
    - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
     
            NSLog(@"didDismissWithButtonIndex");
     
    }
     
    //AlertView即将消失时
     
    - (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
     
            NSLog(@"willDismissWithButtonIndex");
     
    }
     
     
     
    - (void)alertViewCancel:(UIAlertView *)alertView {
     
            NSLog(@"alertViewCancel");  
     
    }  
     
    //AlertView已经显示时  
     
    - (void)didPresentAlertView:(UIAlertView *)alertView {  
     
            NSLog(@"didPresentAlertView");  
     
    }  
     
    //AlertView即将显示时  
     
    - (void)willPresentAlertView:(UIAlertView *)alertView {  
     
            NSLog(@"willPresentAlertView");  
     
    }
                   日期忘记写了

  • 相关阅读:
    利用Python和webhook实现自动提交代码
    Python threading 单线程 timer重复调用函数
    Python requests 使用心得
    openresty实现接口签名安全认证
    使用jedis面临的非线程安全问题
    记一次线上升级openresty中kafka版本产生的多版本兼容问题
    mysql中走与不走索引的情况汇集(待全量实验)
    Elasticsearch深分页以及排序查询问题
    IO多路复用:Redis中经典的Reactor设计模式
    Netty在Dubbo中的使用过程源码分析
  • 原文地址:https://www.cnblogs.com/ioschen/p/3248834.html
Copyright © 2011-2022 走看看