Изменить цвет ячейки, когда ячейка выбрана - PullRequest
0 голосов
/ 19 декабря 2011

у меня есть tableView, содержащий пару ответов, пользователь выберет ответ, если ответ верный, выделенная ячейка будет окрашена зеленым, иначе: неправильный ответ, две ячейки будут окрашены : выделено красным цветом и справа зеленым.

Моя проблема в том, что я не смог изменить значение indexPath на индекс val1, чтобы найти нужную ячейку.

вот мой метод tableView tableView:didSelectRowAtIndexPath:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    NSNumber *value = [truerep objectAtIndex:0];
    NSUInteger val1 = [value integerValue];
    NSUInteger val2 = [indexPath row];

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if (val1==val2) {//right answer so the color of the selected cell will be green
        cell.contentView.backgroundColor = [UIColor greenColor]; 
    }else {//wrong answer so 2 cells will be colored
        //the color of the selected cell will be red and the right cell will be green
        cell.contentView.backgroundColor = [UIColor redColor];

        // idk What to do here to change the value of indexpath by val1
    }
    [tableView deselectRowAtIndexPath:indexPath animated:YES];  
}

1 Ответ

2 голосов
/ 19 декабря 2011

Почему вы хотите это сделать (изменив значение indexPath)?
Этот метод вызывается всякий раз, когда пользователь выбирает строку в табличном представлении, и [indexPath row] даст вам индекс этой строки.

Возможно, проблема связана с тем, как вы храните индексы истинных ответов в массиве truerep, не в состоянии сравнить прямой индекс строки с val1.

Я не знаю, что предполагается содержать truerep и [truerep objectAtIndex:0], но в вашем примере val1 выглядит как индекс строки для правильного ответа и не соответствует реальному правильному ответу индекс строки.

Кроме того, если вы хотите, чтобы две ячейки были цветными, вам придется немного изменить свой код.
Здесь, с if/else, вы получаете только один цвет, когда пользователь выбирает строку.

РЕДАКТИРОВАТЬ на основе ваших комментариев

Вы, вероятно, хотите перебрать все строки и определить, какие из них должны быть окрашены в красный и зеленый цвета. Вот пример:

-(void)tableView:(UITableView *)tableView
 didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSUInteger rowIndex = [indexPath row];
    NSNumber *value = [truerep objectAtIndex:0];
    NSUInteger val1 = [value integerValue]; // index of the correct answer row
    UITableViewCell *cell;

    if(rowIndex = val1) { // only color the right cell in green
        cell = [tableView cellForRowAtIndexPath:ip];
        cell.contentView.backgroundColor = [UIColor greenColor];
    }
    else {
        for(rowIndex = 0; rowIndex < totalRowsCount; rowIndew += 1) {
            NSIndexPath *ip = [NSIndexPath indexPathWithIndex:rowIndex];
            cell = [tableView cellForRowAtIndexPath:ip];
            if(val1 == rowIndex) {
                cell.contentView.backgroundColor = [UIColor greenColor];
            }
            else {
                cell.contentView.backgroundColor = [UIColor redColor]; 
            }
        }
    }
    [tableView deselectRowAtIndexPath:indexPath animated:YES];  
}

Вы наверняка знаете значение для totalRowsCount ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...