Как вставить представление в существующую ячейку таблицы?

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

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

Спасибо! :)

Обновление: вот часть кода на случай, если это поможет помощникам:

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

FlippedViewController *flippedViewController = [[FlippedViewController alloc] initWithNibName:@"FlippedView" bundle:nil];

// What goes in here? Where do contentView and originalView come from?

[originalView removeFromSuperview];
[contentView addSubview:flippedViewController.view];

[flippedViewController release];
}

person Triz    schedule 11.08.2009    source источник


Ответы (1)


Вы можете добавить хук в tableView:didDeselectRowAtIndexPath: (метод UITableViewDelegate), который использует указатель на contentView конкретной ячейки и выполняет изменения в этом UIView так же, как и в любом другом.

Например, если вы хотите просто заменить originalView (при условии, что это то, что сейчас находится в ячейке) на newView, вы можете сделать что-то вроде этого:

// Use your own data structure and indexPath to retrieve contentView.
[originalView removeFromSuperview];
[contentView addSubview:newView];

Это обновит представление без анимации.

Об анимации -- вот два связанных предыдущих вопроса:

person Tyler    schedule 11.08.2009
comment
Ладно, мы к чему-то пришли, спасибо. Потерпите на секундочку мою новизну... Сейчас внутри tableView:didSelectRowAtIndexPath: у меня вот что: [self.navigationController pushViewController:self.editView animated:YES]; Где узнать, какие у меня аналоги для ваших originalView, contentView и newView? - person Triz; 12.08.2009
comment
Каждый UITableViewCell имеет свой собственный UIView, называемый contentView. Вам нужно будет сохранить карту из строки таблицы # (и, возможно, раздела #) в contentView, чтобы вы могли ее найти. В зависимости от вашей настройки у вас может быть только один видимый UIView как дочерний элемент contentView — это будет ваш originalView. И newView - это то, что вы хотите отобразить на своем месте - судя по вашему комментарию, похоже, что вы хотите, чтобы self.editView был заменой, предполагая, что это объект UIView. - person Tyler; 12.08.2009
comment
Я работал над этим всю ночь, и, увы, все еще немного зашел в тупик. Я не могу понять, как ссылаться на contentView текущей ячейки. У меня есть новое представление, все настроено и готово для добавления в качестве подпредставления, но... Я вставлю некоторый код в вопрос выше, посмотрите, поможет ли это? Еще раз спасибо! - person Triz; 14.08.2009