【iOS开发-56】案例BUG:按钮的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet

接上述案例找BUG:【iOS开发-51】案例学习:动画新写法、删除子视图、视图顺序、延迟方法、按钮多功能用法及icon图标和启动页设置

(1)BUG:答案满了就不能再点击option按钮,答案没满就能点。

在optionClick方法的if(full)中设置,即判断答案是否满了,如果满了,则:

if (full) {
        //如果答案满了,不管是否正确,只要满了,下面的option按钮就不能被点击
        for (UIButton *optionBtn in self.optionView.subviews) {
            optionBtn.enabled=NO;
        }
}

只要点击答案按钮,答案必然没有满,所以做个相反操作:

-(void)answerClick:(UIButton *)answerBtn{
    //如果答案满了,不管是否正确,只要满了,下面的option按钮就不能被点击
    for (UIButton *optionBtn in self.optionView.subviews) {
        optionBtn.enabled=YES;
    }
}

(2)以上BUG的第二种解决办法:让option按钮的父控件整个不能与用户交互。

即用以下语句:

        self.optionView.userInteractionEnabled=NO;
        self.optionView.userInteractionEnabled=YES;

代替上面的for循环。

但是除了以上两处之外,还要设置一处。就是因为我们判断了只要答案满了,那么父控件就不能交互按钮不能点击,虽然通过点击答案就能恢复交互。但是特殊情况是:我们点击满了,然后直接跳转到“下一题”,此时父控件依然是被锁定不能交互的。所以需要在“跳转到下一题”的方法中,设置父控件能交互。即

- (IBAction)nextQuestion {
    self.optionView.userInteractionEnabled=YES;
}

或者,最根本的是在添加option按钮的那个方法中设置上面那句话:

-(void)addOptionBtn:(NSQuestion *)question{
    self.optionView.userInteractionEnabled=YES;
}

(3)到了最后一题,虽然“下一题”按钮被之前做了判断不能点击,但是如果答案答对了系统会继续跳到下一题,这个时候依然会崩溃,所以需要做个判断,如果是最后一题,则……弹框。

——以下语句的原理在于:如果我们正在回答的时最后一道题,那么答对之后,它会继续调用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>

——最后可以实现协议方法,也相当于可以实现监听。比如下面这个按钮可以监听用户点击了哪个按钮,并可以做一些反应,比如输入是点击了哪个按钮序号。

-(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;
    }
}

时间: 10-17

【iOS开发-56】案例BUG:按钮的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet的相关文章

【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.opt

IOS 开发笔记-基础 UI(8)控件连线的 strong 和 weak 设定

回忆 oc 的内存管理: objective-c 语法快速过(6)内存管理原理,objective-c 语法快速过(7)编译器特性ARC ARC是苹果为了简化程序员对内存的管理,推出的一套内存管理机制,使用ARC机制,对象的申请和释放工作会在运行时,由编译器自动在代码中添加retain和release 1> strong:强指针引用的对象,在生命周期内不会被系统释放,在OC中,对象默认都是强指针 2> weak:弱指针引用的对象,系统会立即释放,弱指针可以指向其他已经被强指针引用的对象 他们都

Spring.Net.Framework快速开发平台之第一章SNF-MVC通用控件库展示-绝对让你眼前一亮

在我们开发中怎么才能提高效率,就是要有大量的公共组件(控件)可以直接使用而不用自己再开发一遍,既然是公共控件那也得简单实用才行.下面就介绍一下SNF-MVC当中的控件库. 总体控件库展示: 1.通用用户选择(单选.多选) 2. 通用组织机构选择 3. 通用角色选择 4. 通用弹出选择窗口 a) 弹出列表(单选.多选) b) 弹出树(单选.多选) 5. 通用下拉选择 a) 下列选择(单选.多选) b) 下列选择树(单选.多选) 6. 几个通用表单控件 a) 金额.数字 b) 日期.日期范围 c)

SNF开发平台WinForm之十三-时间轴控件使用-SNF快速开发平台3.3-Spring.Net.Framework

一.显示效果如下: 二.在控件库里选择UCTimeAxis 拖拽到窗体里. 三.加入以下代码,在load事件里进行调用就可以运行了. #region 给时间轴控件加载数据 private void UCTimeAxisData() { //增加节点 List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(); list.Add(new KeyValueP

iOS开发中如何保存按钮的状态

在iOS开发中我们经常会需要保存某个按钮的状态,比如很多设置选项中的UISwitch按钮的开关,比如一些按钮的选中与否等等,今天项目中有一个需求是要保存自动登录按钮的选中状态,想要实现这个功能,可以用归档来完成. 首先需求图: 我需要记录自动登录按钮的状态,若用户选择了下次自动登录,那么程序退出再次启动这个按钮仍然是选中状态. 首先,我们需要监听按钮的点击事件,因为在点击事件里面我们能够拿到按钮的状态. 通过下面代码,存储选中状态. - (IBAction)autologinClick:(UIB

【iOS开发-背景】关于按钮背景图片的拉伸

关于按钮背景图片拉伸与不拉伸的效果 拉伸的效果: 不拉伸的效果 拉伸的效果: 不拉伸的效果 拉伸原理 iOS开发中,有一个方法可以将图片按照指定的形式拉伸,拉伸方式为下图,一般拉伸部分都为0: 实现方式 新建一个UIImage的分类 为UIImage扩充一个方法+(UIImage )resizableImage:(NSString )imageName: 然后再按钮所在的ViewController里面设置按钮的背景 分类 @implementation UIImage (Extension)

【iOS开发每日小笔记(十二)】仿Facebook登录界面 错误提示抖动 利用CAAnimation设置动画效果

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 原本以为国庆假期可以有时间看看书,写写博客.实际上大部分时间都被赶场参加婚礼和到处去亲戚家串门吃饭所占用.眼看明天还剩最后一天时间,今天赶紧来更新一篇,也算是没有完全荒废这7天长假吧! Facebook的客

用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.android实现自绘日期选择控件 目的: 通过一个相对复杂的自定义自绘控件来分享: 1.ios以及android自定义自绘控件的开发流程 2.objc与c/c++混合编程 3.android ndk的环境配置,android studio ndk的编译模式,swig在android ndk开发中的作

Excel开发学习笔记:界面交互与控件的布局

除了业务逻辑之外,比较耗时耗力的就是人机交互了.在编写excel定制程序的过程中,这次用到了以下几种交互方式: 通过excel工作表(worksheet)获取用户输入 通过按钮控件触发功能代码执行 通过TreeView控件显示内容摘要及导航 通过自定义的windows窗体提供交互 工作表的操作放到后面再说,讲一下按钮控件button和Treeview控件的布局. 放置控件的方法: 无非可视化放置和运行时代码加载两种.可视化放置比较直观,通过visual studio的toolbox工具栏拖动需要