Отзыв ячейки табличного представления с didSelectRowAtIndexPath - PullRequest
0 голосов
/ 06 апреля 2011

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Note: Some operations like calling [tableView cellForRowAtIndexPath:indexPath]
    // will call heightForRow and thus create a stack overflow
    if(selectedCellIndexPath != nil
       && [selectedCellIndexPath compare:indexPath] == NSOrderedSame){
    labelSize = [[items objectAtIndex:indexPath.row] sizeWithFont:[UIFont fontWithName:@"Helvetica" size:13.0] 
                         constrainedToSize:CGSizeMake(220.0f, MAXFLOAT) 
                             lineBreakMode:UILineBreakModeWordWrap];
    return labelSize.height + 40;
    }
    return 68;
}

Это прекрасно работает и делает ячейку больше.Но нет возможности закрыть камеру.Я пытался прочитать, в этом случае labelSize.heigth, но это не соответствует фактической высоте ячейки, по которой щелкнули.

Кто-нибудь знает хороший способ закрыть ячейку, или другими словами,При повторном нажатии на ячейку необходимо установить высоту 68.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

Я бы прокомментировал ответ Фила Ларсона, но многострочный код в комментариях работает не очень хорошо.

В прошлом, по крайней мере, Apple рекомендовала использовать пустой beginUpdates / *Блок 1004 * для изменения размера анимированных ячеек.Это первый раз, когда я видел UIView анимаций, используемых для достижения того же эффекта.Я использовал эту технику в своем собственном коде.Из кода Фила я заменил бы [UIView animateWithDuration... следующим

[tableView beginUpdates];
[tableView endUpdate];

Если я ошибаюсь и есть новая рекомендация использовать анимацию UIView, мне было бы интересно посмотреть обсуждение этого,Мне бы в голову не пришло пойти с таким подходом.

0 голосов
/ 07 апреля 2011

Вы можете проверить переменную экземпляра selectedCellIndexPath.

Или сделать что-то подобное, если хотите множественный выбор:

NSMutableSet *_selectedIndexPaths;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    CGFloat height = 68.0f;

    if ([_selectedIndexPaths containsObject:indexPath]) {
        height *= 2.0f;
    }

    return height;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([_selectedIndexPaths containsObject:indexPath]) {
        [_selectedIndexPaths removeObject:indexPath];
    } else {
        [_selectedIndexPaths addObject:indexPath];
    }

    [UIView animateWithDuration:0.35 
                          delay:0.0 
                        options:UIViewAnimationOptionLayoutSubviews
                     animations:^{
                         [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];                         
                     }
                     completion:NULL];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...