创建备份区按钮和判断结果
/** 创建备选区按钮 */
- (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;
}