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

时间: 2024-08-02 11:02:47

【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开发一款小巧简洁的日历控件

iOS开发一款小巧简洁的日历控件 一.引言 日 历是iOS开发中有时会用到的一个UI控件,网上开源的代码也很多,我浏览过一些,大致有两种模式,一种是日历的逻辑由开发者自己实现,通过计算闰年与平 年来确定月份天数,另外一种模式是通过NSDate这个时间类,来获取日历的信息.我个人认为后一种更加安全,代码性能也会更加优质,下面就是我用这种模 式实现的一个日历控件. 二.设计思路 1.先来看下效果吧                    2.我们需要实现的功能 (1)每行7天,对应星期,列数为将当前月

iOS开发从入门到精通--开关按钮UISwitch控件

开关按钮UISwitch 在ViewController.h里面 #import <UIKit/UIKit.h> @interface ViewController : UIViewController{ //定义一个开关控件 //作用可以进行状态的改变 //开,关:两种状态可以切换 //所有UIKit框架库中的控件均已UI开头 //苹果官方的控件都定义在UIKit框架库中 UISwitch * _mySwitch; } @property(retain,nonatomic) UISwitch

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

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

iOS开发之资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0+)

今天博客中,我们就来实现一下一些常用资讯类App中常用的分类选择的控件的封装.本篇博客中没有使用到什么新的技术点,如果非得说用到了什么新的技术点的话,那么勉强的说,用到了一些iOS9以后UICollectionView添加的一些新的特性.本篇博客所涉及的技术点主要有UICollectionView的Cell移动,手势识别,控件封装,闭包回调,面向接口编程,Swift中的泛型等等.这些技术点在之前的博客中也多次使用到,只不过本篇博客使用这些技术点来完成我们的具体需求. 一.实例运行效果 先入为主,

Android开发之基本控件和详解四种布局方式

Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局.而在Android中的布局方式就比较丰富了,今天博客中会介绍四种常用的布局方式.先总结一下控件,然后再搞一搞基本方式,开发环境还是用的Mac下的Android Studio.开始今天的正题, 虽然A

IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例

IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add button. AD:[线下活动]三大新锐HTML 5企业汇聚51CTO—大话移动前端技术 IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add button.代

XE8开发安卓之二:按钮和 TEdit 控件的几个常用的属性

按钮和 TEdit 控件的几个常用的属性 Android程序开发必然要用到按钮,按钮的一个比较重要的属性就是 StyleLookup,预置了一系列常用的图标样式,美工不好的,可要多加利用啊,如下图: 另外 2 个常用属性就是 GroupName 和 IsPressed:一组按钮取一个相同的 GroupName,控制其中只能有一个被按下. 按钮的分布一般有以下几种形式: 1.自由摆放,也就是在Form上自由放置. 2.放置在TGridLayout控件中,由TGridLayout自动排列,通过 It

html bottom html submit按钮表单控件与CSS美化(http://www.divcss5.com/html/h619.shtml)

html bottom按钮html submit按钮控件html表单按钮控件-html bottom与html submit按钮表单控件与CSS美化,介绍form input bottom按钮和html input submit按钮基本结构与用法,html按钮控件bottom和submit区别,同时DIVCSS5对html按钮美化布局. 一般提交按钮使用了html submit和html bottom两种按钮控件实现同时可将按钮设置CSS样式美化为时间设计图片按钮,首先DIVCSS5介绍html