代码实现ActionSheet 和 Alert 基本功能-阿里云开发者社区

开发者社区> 技术小胖子> 正文

代码实现ActionSheet 和 Alert 基本功能

简介:
+关注继续查看

Action Sheet就像Windows中的 “确定-取消”对话框一样,用于强制用户进行选择。当用户将要进行的操作具有一定危险时,常常使用Action Sheet对用户进行危险提示,这样,用户有机会进行取消操作。

Alert相当于Windows中的Messagebox,跟Action Sheet也是类似的。不同的是,Alert可以只有一个选择项,而Action Sheet却至少要两个选项。


         想要实现功能是点击一个Button,然后弹出一个Alert警告,然后在Alert上点击一个按钮,又出现一个ActionSheet提示操作,在点击ActionSheet一个Button然后又弹出一Alert个警告,功能效果截图

  


1.创建一个新工程叫ActionSheetDemo; File->New->Project ->single View Application -> next 



2.因为用到了ActionSheet和Alert委托方法,把ActionSheet和Alert协议添加上,在声明下两个对象

#import <UIKit/UIKit.h>  @interface ASDViewController : UIViewController<UIAlertViewDelegate,UIActionSheetDelegate> {      UIActionSheet *actionSheet;     UIAlertView *alert ; }  -(void)buttonClicked:(id)sender; @end

3.ViewDidLod中代码基本都加注释了,直接贴上代码

- (void)viewDidLoad {     [super viewDidLoad]; 	// Do any additional setup after loading the view, typically from a nib.     CGRect frame = CGRectMake(50, 100, 200, 70);          UIButton *myButon = [UIButton buttonWithType:UIButtonTypeRoundedRect];          myButon.frame = frame; //  设置视图标题     [myButon setTitle:@"测试ActionSheet" forState:UIControlStateNormal]; //    [myButon setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];//设置Button没有被选择的时候的字体颜色,选中后就变成默认的蓝色字体     myButon.titleLabel.textColor = [UIColor blackColor];//也是字体颜色设置,和上没方法一样     [myButon setBackgroundColor:[UIColor clearColor]];//背景色设置 //    myButon.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;//button标题对齐方式,默认居中 //    给myButton添加一个事件buttonClicked     [myButon addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; //把按钮添加到view视图上     [self.view addSubview:myButon];           /*    //看博客时,以前没接触这个进度条控件,做测试用,搁着看的 http://www.cocoachina.com/iphonedev/toolthain/2011/1223/3778.html        UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];     progressView.frame = CGRectMake(20, 300, 200, 30);     [alert addSubview:progressView];  */      }

如果Button显示不出来,可以看看代码写Button遇到问题这篇博客,有些问题我这种菜鸟是解释不清楚的

4.Button点击事件,

-(void)buttonClicked:(id)sender {     UIAlertView *alerttest = [[UIAlertView alloc] initWithTitle:@"提示"                                                     message:@"你点击了测试ActionSheet这个按钮" delegate:self                                           cancelButtonTitle:@"嗯嗯 了解"                                           otherButtonTitles:@"弹出ActionSheet吧",@"无所谓",@"有所谓", nil];     [alerttest addButtonWithTitle:@"不发表意见"];//可以在Alrt上再添加一个Button     alert=alerttest;          [alert show];      }
5.这里我说一下Alert的一些委托方法,用的比较少吧,其他的也没做测试,测试也就是在委托方法里NSLog一下,再在终端下查看输出结果,通过点击按钮查看这些输出结果http://blog.csdn.net/duxinfeng2010/article/details/7702157这里面有,也就不在写出

//根据被点击按钮索引处理点击事件 -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {   /********************************************************************************************    本想试试发挥下switch()的左右,可是在buttonIdex==2的时候,想加入一个Actionsheet,结果报错,说case 是保护数据,        ********************************************************************************************     switch (buttonIndex) {         case 0:             NSLog(@"取消按钮");             break;                          case 1:             NSLog(@"弹出ActionSheet吧");                         break;                          case 2:             NSLog(@"有所谓了");             break;                          case 3:             NSLog(@"无所谓了");             break;                          case 4:             NSLog(@"不发表意见");             break;                     default:             break;       }    ********************************************************************************************/     if (buttonIndex == 0) {         NSLog(@"取消按钮");     }     else if (buttonIndex == 1) {         UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"操作选项" delegate:self                                                   cancelButtonTitle:@"取消"                                              destructiveButtonTitle:@"确认取消?" otherButtonTitles:@"Test1",@"Test2",@"Test4", nil];         [sheet showInView:self.view];               }     else if(buttonIndex  == 2)     {         NSLog(@"有所谓了");      }     else if (buttonIndex == 3) {          NSLog(@"无所谓了");     } else {     NSLog(@"不发表意见");  }  } 
//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 {  }
ActionSheet和Alert写法一样,原本我想在Alert的“你点击了测试ActionSheet这个按钮”时调用我写的一个弹出ActionSheet,但是根据按钮的索引值(buttonIndex)我不知道怎么来确定这个按钮对象,也就不会怎么用addTarget: action: forControlEvents:方法来在这个委托方法外,再写一个函数了,所以也就直接在委托方法中吧ActionSheet写了,结果实现了,总感觉方法不是太好
 UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"操作选项" delegate:self                                                   cancelButtonTitle:@"取消"                                              destructiveButtonTitle:@"确认取消?" otherButtonTitles:@"Test1",@"Test2",@"Test4", nil];         [sheet showInView:self.view];
6.然后把ActionSheet委托方法也写上,其实在这些委托方法里根本没多少功能,只是想让自个熟悉下都有什么委托,推荐看看这篇博客 http://blog.csdn.net/duxinfeng2010/article/details/7702169

#pragma actionSheet  delegate  -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {     if (buttonIndex == 0) {         NSLog(@"已经取消了");     }     if (buttonIndex == 1) {         UIAlertView *alerttest2 = [[UIAlertView alloc] initWithTitle:@"提示"                                                             message:@"你在ActionSheet这个test1按钮" delegate:self                                                   cancelButtonTitle:@"Cancel"                                                   otherButtonTitles:@"无所谓",@"有所谓", nil];         [alerttest2 addButtonWithTitle:@"不发表意见"];//可以在Alrt上再添加一个Button                           [alerttest2 show];     }  }  -(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {  } -(void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex {  }  -(void)actionSheetCancel:(UIActionSheet *)actionSheet {       }  -(void)didPresentActionSheet:(UIActionSheet *)actionSheet {   }  -(void)willPresentActionSheet:(UIActionSheet *)actionSheet {  } 

附上源代码http://download.csdn.net/detail/duxinfeng2010/4402019





  本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1208756,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C#代码实现矢量画图
原文:C#代码实现矢量画图 版权声明:本文为博主原创文章,转载请附上链接地址。 https://blog.csdn.net/ld15102891672/article/details/80275969 ...
964 0
作为Emacs的爱好者,你的基本功真的合格吗?
都说Emacs的爱好者经常吹嘘自己的Emacs的功能可多了,除了文本编辑,其他的诸如收发邮件、听音乐甚至是打游戏都不在话下,这也说明其的扩展性是极其强大的,往往可以搞定很多软件需要做的事情。虽然如此,但你的Emacs的基本功真的合格了吗?你真的对每一个快捷键都了如指掌了吗?下面就来测试一下吧!
1876 0
Spring MVC 基于阻塞队列 LinkedBlockingQueue 的同步长轮询功能实现
标题 Spring MVC 基于阻塞队列 LinkedBlockingQueue 的同步长轮询功能实现,其实本文介绍的也是生产者消费者的一种实现。生产者不必是一个始终在执行的线程,它可以是一个接口,接受客户端的请求,向队列中插入消息;消费者也不必是一个始终在执行的线程,它同样也可以是一个接口,接受客户端的请求,从队列中取出属于自己的消息;看到很多介绍生产者消息者实现的文章,实现场景都很简单,现实应用往往会比较复杂,有一些附加条件,本例中就需要根据消息中的 familyId 来判断消息是不是下发给自己的。
1133 0
Jsp+JavaBean+Servlet实现模拟银行账户存取款等功能的网站(实习第4-8天)
本来想学J2EE的3个经典框架(Spring + Struts +Hibernate),奈何负责实习的老师只讲了Jsp+JavaBean+Servlet,项目时间还蛮紧的,所以只用JJS实现了这个项目,后面寒假有时间的话再用SSH实现并完善这个网站吧。前几天抽时间学了点前端的东西,感觉还是有点麻烦的,前端做既漂亮又有良好的兼容性不是件太容易的事情,所幸现在觉得能够静下来学技术做开发是件
1323 0
Fun 2.16.0 发布——资源部署、NAS 支持、镜像拉取等功能又又又增强啦!
Fun 2.16.0 发布——资源部署、NAS 支持、镜像拉取等功能又又又增强啦! Fun 是什么 Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。
1244 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载