创建备份区按钮和判断结果

/** 创建备选区按钮 */
- (void)createOptionButtons:(HMQuestion *)question
{
// 问题:每次调用下一题方法时,都会重新创建21个按钮
// 解决:如果按钮已经存在,并且是21个,只需要更改按钮标题即可
if (self.optionsView.subviews.count != question.options.count) {
// 重新创建所有按钮
for (UIView *view in self.optionsView.subviews) {
[view removeFromSuperview];
} CGFloat optionW = self.optionsView.bounds.size.width;
CGFloat optionX = (optionW - kTotolCol * kButtonWidth - (kTotolCol - ) * kButtonMargin) * 0.5; for (int i = ; i < question.options.count; i++) {
int row = i / kTotolCol;
int col = i % kTotolCol; CGFloat x = optionX + col * (kButtonMargin + kButtonWidth);
CGFloat y = row * (kButtonMargin + kButtonHeight); UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(x, y, kButtonWidth, kButtonHeight)];
[btn setBackgroundImage:[UIImage imageNamed:@"btn_option"] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@"btn_option_highlighted"] forState:UIControlStateHighlighted]; [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [self.optionsView addSubview:btn]; // 添加按钮监听方法
[btn addTarget:self action:@selector(optionClick:) forControlEvents:UIControlEventTouchUpInside];
}
NSLog(@"创建候选按钮");
} // 如果按钮已经存在,在点击下一题的时候,只需要设置标题即可
int i = ;
for (UIButton *btn in self.optionsView.subviews) {
// 设置备选答案
[btn setTitle:question.options[i++] forState:UIControlStateNormal]; // 回复所有按钮的隐藏状态
btn.hidden = NO; // // 添加按钮监听方法
// 提示,如果再次添加监听方法,意味着每次调用下一题的时候都会添加监听方法
// [btn addTarget:self action:@selector(optionClick:) forControlEvents:UIControlEventTouchUpInside];
}
} #pragma mark - 候选按钮点击方法
/** 候选按钮点击 */
- (void)optionClick:(UIButton *)button
{
// 1. 在答案区找到第一个文字为空的按钮
UIButton *btn = [self firstAnswerButton]; // 如果没有找到按钮,直接返回
if (btn == nil) return; // 2. 将button的标题设置给答案区的按钮
[btn setTitle:button.currentTitle forState:UIControlStateNormal]; // 3. 将button隐藏
button.hidden = YES; // 4. 判断结果
[self judge];
} /** 判断结果 */
- (void)judge
{
// 如果四个按钮都有文字,才需要判断结果
// 遍历所有答题区的按钮
BOOL isFull = YES;
NSMutableString *strM = [NSMutableString string]; for (UIButton *btn in self.answerView.subviews) {
if (btn.currentTitle.length == ) {
// 只要有一个按钮没有字
isFull = NO;
break;
} else {
// 有字,拼接临时字符串
[strM appendString:btn.currentTitle];
}
} if (isFull) {
NSLog(@"都有字");
// 判断是否和答案一致
// 根据self.index获得当前的question
HMQuestion *question = self.questions[self.index]; // 如果一致,进入下一题
if ([strM isEqualToString:question.answer]) {
NSLog(@"答对了");
[self setAnswerButtonsColor:[UIColor blueColor]]; // 等待0.5秒,进入下一题
[self performSelector:@selector(nextQuestion) withObject:nil afterDelay:0.5];
} else {
// 如果不一致,修改按钮文字颜色,提示用户
NSLog(@"答错了");
[self setAnswerButtonsColor:[UIColor redColor]];
}
}
} /** 修改答题区按钮的颜色 */
- (void)setAnswerButtonsColor:(UIColor *)color
{
for (UIButton *btn in self.answerView.subviews) {
[btn setTitleColor:color forState:UIControlStateNormal];
}
} // 在答案区找到第一个文字为空的按钮
- (UIButton *)firstAnswerButton
{
// 取按钮的标题
// 遍历答题区所有按钮
for (UIButton *btn in self.answerView.subviews) {
if (btn.currentTitle.length == ) {
return btn;
}
}
return nil;
}

IOS第四天(5:创建备份区按钮和判断结果)的更多相关文章

  1. oracle学习 四(持续更新中)无法为表空间 MAXDATA 中的段创建 INITIAL 区

    解决建立表的时候出现的 ORA-01658: 无法为表空间 MAXDATA 中的段创建 INITIAL 区 出现这个问题是因为表空间的大小不足,可以给他扩容这样的话也会多出来一个数据文件.具体写法如下 ...

  2. IOS第四天(6:答题区按钮点击和乱序)

    #pragma mark - 答题区按钮点击方法 - (void)answerClick:(UIButton *)button { // 1. 如果按钮没有字,直接返回 ) return; // 2. ...

  3. iOS开发UI篇—CAlayer(创建图层)

    iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...

  4. OCP读书笔记(5) - 使用RMAN创建备份

    5.Creating Backups with RMAN 创建备份集 RMAN> backup as backupset format '/u01/app/oracle/backup/rmanb ...

  5. MySQL(十四)之数据备份与还原

    前言 上一篇分享了关于MySQL事务的知识,在我们数据库中最重要的就是数据了,所以数据的备份就显的特别的重要! 为什么要备份数据? 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大 ...

  6. IOS的四种数据存储方式及优劣

    IOS有四种经常使用数据存储方式: 第一种方法:用NSUserDefaults存储配置信息 NSUserDefaults被设计用来存储设备和应用的配置信息.它通过一个工厂方法返回默认的.也是最经常使用 ...

  7. matlab中subplot 在平铺位置创建坐标区

    来源:https://ww2.mathworks.cn/help/matlab/ref/subplot.html?searchHighlight=subplot&s_tid=doc_srcht ...

  8. redis学习教程四《管理、备份、客户端连接》

    redis学习教程四<管理.备份.客户端连接>  一:Redis服务器命令 Redis服务器命令 下表列出了与Redis服务器相关的一些基本命令. 序号 命令 说明 1 BGREWRITE ...

  9. --自动创建备份SQL

    --自动创建备份SQL DECLARE @dbname VARCHAR(50) ,--要备份的数据库名称 @bakname VARCHAR(50) ,--备份后的bat名称 @sql VARCHAR( ...

随机推荐

  1. Greedy:Stripes(POJ 1826)

    新生物 题目大意:给你一堆数,两两结合,答案为2*sqrt(x1*x2),问组合成一个数时,最小的量? 超级无敌大水题,排序或者用堆都可以,反正就是优先组合大的,让根号一直把大数开根降低整体的大小 # ...

  2. 项目总结(五)--- 界面调试工具Reveal

    在开发中,我们也许会碰到以下需求:对于一些动态复杂的交互界面,手码去制定界面是常有的事情,然而我们在开发中想修改过一些参数后想看下实时效果,只能重新运行项目,进入到对应的页面来进行修改,是不是有点麻烦 ...

  3. Struts2 Action与Servlet API耦合

    单元测试在开发中是非常重要的一个环节程序员在写完代码时,相应的单元测试也应写完整,否则你的代码就是不能让人信服的Struts2将Action与Servlet的API进行解耦之后,就使得单元测试变得非常 ...

  4. undefined reference to libiconv_open'

    ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor': /home/king/php-5.2.13/ext/iconv ...

  5. repo的用法

    转自:http://blog.csdn.net/junglyfine/article/details/6299636 注:repo只是google用Python脚本写的调用Git的一个脚本,主要是用来 ...

  6. $GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别

    $_POST:通过 HTTP POST 方法传递的变量组成的数组.是自动全局变量. $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变 ...

  7. UML中的stereotype

    在使用rose的时候.rose的类里面有个stereotype的选项.选择了不同的选项类会呈现不同的图形效果.这里对stereotype做一点总结, Stereotyp英文的原意是印刷中的铅字.比如, ...

  8. Java Annotation原理分析(一)

    转自:http://blog.csdn.net/blueheart20/article/details/18725801 小引: 在当下的Java语言层面上,Annotation已经被应用到了语言的各 ...

  9. sqldatasource控件设置where语句

    按照学号查找显示信息,我现在也不知道各部分代表的含义,先记下来

  10. HTML-Audio/Video

    简介: 容器:不论是音频还是视频文件,实际上都是容器文件: 视频文件包含了音频轨道.视频轨道和其他一些元数据: 视频文件播放时,音频轨道和视频轨道是绑定在一起:元数据包含了该视频的封面.子标题.字幕等 ...