【iOS开发-56】案例BUG:button的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet
接上述案例找BUG:【iOS开发-51】案例学习:动画新写法、删除子视图、视图顺序、延迟方法、button多功能使用方法及icon图标和启动页设置
(1)BUG:答案满了就不能再点击optionbutton,答案没满就能点。
在optionClick方法的if(full)中设置,即推断答案是否满了,假设满了。则:
if (full) {
//假设答案满了,无论是否正确,仅仅要满了,以下的optionbutton就不能被点击
for (UIButton *optionBtn in self.optionView.subviews) {
optionBtn.enabled=NO;
}
}
仅仅要点击答案button,答案必定没有满,所以做个相反操作:
-(void)answerClick:(UIButton *)answerBtn{
//假设答案满了,无论是否正确。仅仅要满了,以下的optionbutton就不能被点击
for (UIButton *optionBtn in self.optionView.subviews) {
optionBtn.enabled=YES;
}
}
(2)以上BUG的另外一种解决的方法:让optionbutton的父控件整个不能与用户交互。
即用下面语句:
self.optionView.userInteractionEnabled=NO;
self.optionView.userInteractionEnabled=YES;
取代上面的for循环。
可是除了以上两处之外,还要设置一处。就是由于我们推断了仅仅要答案满了,那么父控件就不能交互button不能点击,尽管通过点击答案就能恢复交互。
可是特殊情况是:我们点击满了,然后直接跳转到“下一题”,此时父控件依旧是被锁定不能交互的。所以须要在“跳转到下一题”的方法中,设置父控件能交互。即
- (IBAction)nextQuestion {
self.optionView.userInteractionEnabled=YES;
}
或者,最根本的是在加入optionbutton的那个方法中设置上面那句话:
-(void)addOptionBtn:(NSQuestion *)question{
self.optionView.userInteractionEnabled=YES;
}
(3)到了最后一题,尽管“下一题”button被之前做了推断不能点击,可是假设答案答对了系统会继续跳到下一题,这个时候依旧会崩溃,所以须要做个推断,假设是最后一题。则……弹框。
——下面语句的原理在于:假设我们正在回答的时最后一道题,那么答对之后,它会继续调用nextQuestion方法,这个时候我们就推断它是否是最后一道题,假设是,则弹框。
——这里的弹框,我们用不到代理,可是为了复习代理知识,把self(控制器)设置为它的代理。
- (IBAction)nextQuestion {
if (self.index==self.questions.count-1) {
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"恭喜" message:@"闯关成功!" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"好的", nil];
[alert show];
return;
}
}
——然后在开头的地方遵守协议
@interface ViewController ()<UIAlertViewDelegate>
——最后能够实现协议方法,也相当于能够实现监听。
比方以下这个button能够监听用户点击了哪个button,并能够做一些反应,比方输入是点击了哪个button序号。
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
NSLog(@"%d",buttonIndex);
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
(4)延伸一下,还有一种提示框。
ActionSheet
——提示框的展示稍有差别,它的出现是“在哪个视图中出现”,还有其它出现方式。
- (IBAction)nextQuestion {
if (self.index==self.questions.count-1) {
UIActionSheet *sheet=[[UIActionSheet alloc]initWithTitle:@"恭喜通关! " delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles:@"其它", nil];
[sheet showInView:self.view];
return;
}
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
【iOS开发-56】案例BUG:button的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet的更多相关文章
- iOS开发~视图(UIView)与控件(UIControl)
1.UIView类 1.什么是视图 看得见的都是视图 2.什么是控件 一种特殊的视图,都是UIControl的子类,不仅具有一定的显示外观,还能响应高级事件,与用户交互.严格意义上UILabel不是控 ...
- IOS开发-UI学习-使用UIImageView控件制作动画
先添加40张tomcat的图片到资源列表中:名称为cat_eat0000.jpg到cat_eat0039.jpg. 1.定义所需控件 // 定义按钮,图片控件.可变数组对象 UIButton *act ...
- iOS开发之资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0+)
今天博客中,我们就来实现一下一些常用资讯类App中常用的分类选择的控件的封装.本篇博客中没有使用到什么新的技术点,如果非得说用到了什么新的技术点的话,那么勉强的说,用到了一些iOS9以后UIColle ...
- Android开发之基本控件和详解四种布局方式
Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...
- ios开发随笔第一篇-button,label按钮的一些属性的使用
我用的是纯代码方式,喜欢用storyboard开发的其实也很爽了; 首先谈谈button,ios中新建button这个对象一般接触的都明白,UIButton *button名=[ UIButton a ...
- Excel开发学习笔记:界面交互与控件的布局
遇到一个数据处理自动化的问题,于是打算开发一个基于excel的小工具.在业余时间一边自学一边实践,抽空把一些知识写下来以备今后参考,因为走的是盲人摸象的野路子,幼稚与错误请多包涵. , ).value ...
- 【IOS界面布局】横竖屏切换和控件自适应(推荐)
[IOS界面布局]横竖屏切换和控件自适应(推荐) 分类: [MAC/IOS下开发]2013-11-06 15:14 8798人阅读 评论(0) 收藏 举报 横竖屏切换 自适应 第一种:通过人为的办法改 ...
- Windows Phone开发(16):样式和控件模板
原文:Windows Phone开发(16):样式和控件模板 在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的 ...
- firefox扩展开发(二):用XUL创建窗口控件
firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...
随机推荐
- python3 使用openpyxl库读写excel(续)
官网:https://openpyxl.readthedocs.io/en/stable/
- Android -- SharedPreferences存储信息
背景 Share ...
- [转]How to query posts filtered by custom field values
Description It is often necessary to query the database for a list of posts based on a custom field ...
- libsvm svmtrain函数运行出错问题
我安装的是matlab R2013a 安装上libsvm后需要设置set path 为libsvm的所有文件夹加载上,但是发现每次重新打开之后,之前加载的又不见了,所有导致出现,使用svmsrai ...
- SharpDevelop 版本信息
mscorlib,4.0.0.0,C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll SharpDevelop,5.1.0.4936, ...
- lua接收图片并进行md5处理
需要luacurl(http://luacurl.luaforge.net/)和MD5两个库函数 curl = require("luacurl") require("m ...
- 在MyEclipse中设置jsp页面为默认utf-8编码(转)
http://www.cnblogs.com/xdp-gacl/p/3496161.html 在MyEclispe中创建Jsp页面,Jsp页面的默认编码是“ISO-8859-1”,如下图所示: 在这种 ...
- web应用程序访问串口
https://github.com/tylermenezes/SerialServe https://github.com/straend/SerialWebsocket http://www.cn ...
- 在LinuxMint中对firefox进行手动安装flash插件
/********************************************************************* * Author : Samson * Date ...
- webservice系统学习笔记9-使用契约优先的方式的一个服务端demo(隐式传Header信息)
服务器端: 1.编写wsdl文件 <?xml version="1.0" encoding="UTF-8" standalone="no&quo ...