ios - расширить ячейку табличного представления, как приложение Twitter

Я хочу, чтобы при выборе твита было то же поведение, что и в приложении Twitter: расширение строки и добавление дополнительного контента.

Так что это не только основной размер строки. Я думаю, что мне нужно 2 разных пользовательских ячейки, поэтому я сделал что-то вроде этого

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([indexPath compare:self.selectedIndexPath] != NSOrderedSame) {
        FirstCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FirstCell"];
        if (!cell) {
            cell = [[FirstCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FirstCell"];
        }

        cell.firstnameLabel.text = [[self.items objectAtIndex:indexPath.row] objectForKey:@"firstname"];

        return cell;
    }
    else {
        SecondCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SecondCell"];
        if (!cell) {
            cell = [[SecondCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SecondCell"];
        }

        cell.firstnameLabel.text = [[self.items objectAtIndex:indexPath.row] objectForKey:@"firstname"];
        cell.lastnameLabel.text = [[self.items objectAtIndex:indexPath.row] objectForKey:@"lastname"];

        return cell;
    }

}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([indexPath compare:self.selectedIndexPath] == NSOrderedSame) {
        return 80.0;
    } else {
        return 44.0;
    }
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.selectedIndexPath = indexPath;

    [tableView reloadData];
}

Моя проблема здесь в том, что я хочу сохранить плавную анимацию, такую ​​как приложение Twitter, что не в моем случае из-за [tableView reloadData] (что является обязательным, я думаю, так как у меня есть 2 различных пользовательских ячейки)

Итак, кто-нибудь знает, как мне обойтись, или кто-то знает, как приложение Twitter обрабатывает анимацию?

3 ответа

Решение

Вы хотите перезагрузить эту ячейку с анимацией:

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
[tableView beginUpdates];
[tableView endUpdates];

это вызывает обновление размеров строки ячейки для всего tableView.... по ссылке из: iPhone - Плавная анимация для изменения высоты UITableViewCell, включая обновление содержимого

Удачного кодирования!

На самом деле это довольно легко реализовать с помощью двух пользовательских ячеек, которые вы изначально предполагали, просто комбинируя ваш оригинальный код с решением rooster117. замещать [tableView reloadData] в вашем tableView:didSelectRowAtIndexPath: с:

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];

и у тебя должно быть свое решение.

Другие вопросы по тегам