#import "HMViewController.h"
#import "HMQuestion.h" #define kButtonWidth 35
#define kButtonHeight 35
#define kButtonMargin 10
#define kTotolCol 7 @interface HMViewController ()
@property (weak, nonatomic) IBOutlet UIButton *iconButton;
@property (weak, nonatomic) IBOutlet UILabel *noLabel;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UIButton *nextQuestionButton; @property (weak, nonatomic) IBOutlet UIView *answerView;//答案框
@property (weak, nonatomic) IBOutlet UIView *optionsView;//选择框
@property (nonatomic, strong) NSArray *questions; //数据 /** 题目索引 */
@property (nonatomic, assign) int index;
@end @implementation HMViewController - (NSArray *)questions
{
if (_questions == nil) {
_questions = [HMQuestion questions];
}
return _questions;
} - (UIButton *)cover
{
if (_cover == nil) {
_cover = [[UIButton alloc] initWithFrame:self.view.bounds];
_cover.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5];
[self.view addSubview:_cover];
_cover.alpha = 0.0; [_cover addTarget:self action:@selector(bigImage) forControlEvents:UIControlEventTouchUpInside];
}
return _cover;
} - (void)viewDidLoad
{
[super viewDidLoad]; self.index = -;
[self nextQuestion];
} /** 调整状态栏颜色 */
/**
UIStatusBarStyleDefault 黑色状态栏
UIStatusBarStyleLightContent 亮色状态栏
*/
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
} #pragma mark - 下一题
- (IBAction)nextQuestion
{
// 1. 当前答题的索引,索引递增
self.index++; // 2. 从数组中按照索引取出题目模型数据
HMQuestion *question = self.questions[self.index]; // 3. 设置基本信息
self.noLabel.text = [NSString stringWithFormat:@"%d/%d", self.index + , self.questions.count];
self.titleLabel.text = question.title;
[self.iconButton setImage:[UIImage imageNamed:question.icon] forState:UIControlStateNormal]; // 如果到达最后一题,禁用下一题按钮
self.nextQuestionButton.enabled = (self.index < self.questions.count - ); // 4. 设置答案按钮 // 首先清除掉答题区内的所有按钮
// 所有的控件都继承自UIView,多态的应用
for (UIView *btn in self.answerView.subviews) {
[btn removeFromSuperview];
} CGFloat answerW = self.answerView.bounds.size.width;
int length = question.answer.length;
CGFloat answerX = (answerW - kButtonWidth * length - kButtonMargin * (length - )) * 0.5; // 创建所有答案的按钮
for (int i = ; i < length; i++) {
CGFloat x = answerX + i * (kButtonMargin + kButtonWidth); UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(x, , kButtonWidth, kButtonHeight)];
[btn setBackgroundImage:[UIImage imageNamed:@"btn_answer"] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@"btn_answer_highlighted"] forState:UIControlStateHighlighted]; [self.answerView addSubview:btn];
} // 5. 设置备选按钮
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 setTitle:question.options[i] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [self.optionsView addSubview:btn];
} NSLog(@"%d", self.optionsView.subviews.count);
} @end

IOS第四天(4:下一题和选框的实现)的更多相关文章

  1. MVC模式下如何对多选框数据进行增删改查

    一.业务情景:      做的是一个项目管理的增删改查模块,一个项目里面有项目成员属性,而且一个项目可以有多个成员,一个成员可以参加多个项目,多对多关系,数据库表里自然要建立一个关系表. 视图 二.视 ...

  2. IE7下如何判断复选框是否被选中(利用jquery)

    var checkM; $(".rate-mainL .checkM").click(function(){ var checkM=$("input[name='chec ...

  3. IOS第四天(5:创建备份区按钮和判断结果)

    创建备份区按钮和判断结果 /** 创建备选区按钮 */ - (void)createOptionButtons:(HMQuestion *)question { // 问题:每次调用下一题方法时,都会 ...

  4. 统计iOS产品不同渠道的下载量

    如何统计iOS产品不同渠道的下载量? 一.前言 在开发过程中,Android可能会打出来很多的包,用于标识不同的商店下载量.原来觉得苹果只有一个商店:AppStore,如何做出不同来源的统计呢?本篇文 ...

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

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

  6. 微信小程序答题,怎么设计页面渲染,答完一题,跳到下一题

    想要的效果 1.第一页只显示第一道题的内容,如图红框2.答题后,点击下一题,内容显示第二道题的内容 代码 answer.wxml <!--pages/answer/answer.wxml--&g ...

  7. iOS系统提供开发环境下命令行编译工具:xcodebuild

    iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...

  8. onhashchange事件,只需要修改hash值即可响应onhashchange事件中的函数(适用于上一题下一题和跳转页面等功能)

    使用实例: 使用onhashchange事件做一个简单的上一页下一页功能,并且当刷新页面时停留在当前页 html: <!DOCTYPE html><html><body& ...

  9. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

随机推荐

  1. UVA11806-Cheerleaders(容斥原理+二进制)

    In most professional sporting events, cheerleaders play a major role in entertaining the spectators. ...

  2. July 25th, Week 31st Monday, 2016

    We will not go quietly into the night. 今夜,我们将奋战到底. We will be the champion. We will not stop fightin ...

  3. 信与信封问题(codevs 1222)

    题目描述 Description John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出.但是,第二天John的儿子Small John将这n封信都拿出了信封.不幸的是,Small Joh ...

  4. Phoenix实现用SQL查询HBase

    博客已转移,请借一步说话,http://www.weixuehao.com/archives/111 HBase,一个NoSQL数据库,可存储大量非关系型数据. HBase,可以用HBase shel ...

  5. hrbustoj 1073:病毒(并查集,入门题)

    病毒Time Limit: 1000 MS Memory Limit: 65536 KTotal Submit: 719(185 users) Total Accepted: 247(163 user ...

  6. PHP GBK UTF8互转

    function gbk_to_utf8($str){     return mb_convert_encoding($str, 'utf-8', 'gbk'); }   function utf8_ ...

  7. 查询SQLServer的启动时间

    --2008及之后版本才有 SELECT sqlserver_start_time FROM sys.dm_os_sys_info

  8. 精灵动画Animation对话框组成Idle动画的各精灵

    精灵动画Animation对话框组成Idle动画的各精灵 1.3  精灵动画 场景中已经添加了精灵,现在是时候让让它动起来了.读者也许已经从精灵图集中,各精灵的命名中看出来了,这个精灵一共有两种动画状 ...

  9. 解决eclipse中git插件中的cannot open git-upload-pack问题

    有时候在eclipse上使用插件egit向github或者osc上同步代码时,有时候会发现出现cannot open git-upload-pack这个问题. 一般引起这个问题的原因有两个:一.网络问 ...

  10. win 7 普通家庭版 装IIS

    每当一个程序员入职的时候,几乎都会干一件事情,就是重装操作系统,这是一场不易之战: 1)耗时太长: 2)容易遇到怪异的系统行为. 1.win7为毛装不上VS2012 先装一个win7 x64 旗舰版, ...