【iOS开发-56】案例BUG:button的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet
2017-08-12 21:00
573 查看
接上述案例找BUG:【iOS开发-51】案例学习:动画新写法、删除子视图、视图顺序、延迟方法、button多功能使用方法及icon图标和启动页设置
(1)BUG:答案满了就不能再点击optionbutton,答案没满就能点。
在optionClick方法的if(full)中设置,即推断答案是否满了,假设满了。则:
(2)以上BUG的另外一种解决的方法:让optionbutton的父控件整个不能与用户交互。
即用下面语句:
取代上面的for循环。
可是除了以上两处之外,还要设置一处。就是由于我们推断了仅仅要答案满了,那么父控件就不能交互button不能点击,尽管通过点击答案就能恢复交互。
可是特殊情况是:我们点击满了,然后直接跳转到“下一题”,此时父控件依旧是被锁定不能交互的。所以须要在“跳转到下一题”的方法中,设置父控件能交互。即
或者,最根本的是在加入optionbutton的那个方法中设置上面那句话:
(3)到了最后一题,尽管“下一题”button被之前做了推断不能点击,可是假设答案答对了系统会继续跳到下一题,这个时候依旧会崩溃,所以须要做个推断,假设是最后一题。则……弹框。
——下面语句的原理在于:假设我们正在回答的时最后一道题,那么答对之后,它会继续调用nextQuestion方法,这个时候我们就推断它是否是最后一道题,假设是,则弹框。
——这里的弹框,我们用不到代理,可是为了复习代理知识,把self(控制器)设置为它的代理。
——然后在开头的地方遵守协议
——最后能够实现协议方法,也相当于能够实现监听。
比方以下这个button能够监听用户点击了哪个button,并能够做一些反应,比方输入是点击了哪个button序号。
(4)延伸一下,还有一种提示框。
ActionSheet
——提示框的展示稍有差别,它的出现是“在哪个视图中出现”,还有其它出现方式。
(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); }
(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; } }
相关文章推荐
- 【iOS开发-56】案例BUG:按钮的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet
- IOS开发 视图重叠时设置交互的优先级__userInteractionEnabled用户交互
- 【iOS开发-57】案例改进:block动画、控件的removeFromSuperview、利用layer设置圆角矩形以及代理模式运用
- iOS开发封装带有Button的UIView控件,使用target-action模式给button添加点击事件
- 【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃
- IOS开发之 ---- iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
- 【iOS开发-60】案例学习:多组数据的tableView设置、添加右側组索引、多层数据模型设置以及valueForKeyPath
- ios iphone开发中使用UIActivityIndicatorView 控件来做等待提示。
- 【React Native开发】React Native 控件之Modal详解-Android/iOS双平台通用(56)
- iOS开发——修复bug系列一objc-class-ref in UserSettingController.o
- iOS 自带三种提示框使用、UIAlertView以及UIAlertController的使用
- iOS开发-UI控件:UISwitch控件两种使用方法和监听
- IOS开发之按钮控件Button详解
- ios iphone开发中使用UIActivityIndicatorView 控件来做等待提示。
- iOS学习之—— userInteractionEnabled
- 【iOS开发-12】UISwitch开关控件属性介绍以及获取开关状态并做出响应
- iOS开发之有趣的UI —— 基础控件与经典案例
- 【IOS 开发】基本 UI 控件详解 (UISegmentedControl | UIImageView | UIProgressView | UISlider | UIAlertView )
- iOS开发UISwitch开关控件属性介绍以及获取开关状态并做出响应
- 【iOS开发-53】案例学习:scrollView的核心用法以及无法滚动的解决办法