Изменение contentView при нажатии кнопки Accessory - PullRequest
0 голосов
/ 03 февраля 2012

Я вложил в подкласс UITableViewCell для отображения UIImage и двух UILabel подпредставлений. В контроллере представления для табличного представления в методе cellForRowAtIndexPath: я включил вспомогательное представление через setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton.

Ячейки отображаются правильно.

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

  1. В подклассе UITableViewCell внутри layoutSubviews создайте CGRect s для «альтернативных» меток, расположите их одинаково помещает как две "оригинальные" метки и скрывает их через setAlpha:;
  2. Если нажать кнопку раскрытия, поменять набор из двух пометить, отрегулировав их соответствующие альфа.

Проблема в том, что я не могу понять, какую логику в layoutSubviews я бы использовал, чтобы узнать, была ли нажата дополнительная кнопка. Я вижу, что в представлении контроллер accessoryButtonTappedForRowWithIndexPath: вызывается при нажатии этой кнопки, и оттуда кажется, что я бы назвал layoutSubviews, но не могу понять, как использовать этот факт для достижения того, что я пытаюсь сделать.

Я все об этом говорю неправильно? Вместо того, чтобы скрывать / показывать CGRect s с альфой, я должен просто создать другой подкласс UITableViewCell?

1 Ответ

1 голос
/ 03 февраля 2012

Когда я нажимаю на кнопку раскрытия дополнительных принадлежностей, я хочу заменить два подпредставления UILabel двумя разными подпредставлениями UILabel.

Я сделаю следующее.Создайте публичный метод в вашем подклассе UITableViewCell, как показано ниже:

- (void)changeContentForCell;

В этом методе вы можете установить contentView так, как вам нравится.

Затем в вашем контроллере представления реализуйте

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    CustomCell* cCell = (CustomCell*)[tableView cellForRowAtIndexPath:indexPath];
    [cCell changeContentForCell];
}

Это простой пример для изменения содержимого.По моему мнению, вам не нужно использовать layoutSubviews для добавления представлений.

Оставьте эту логику в changeContentForCell и затем вызовите setNeedsLayout, чтобы изменить свой макет.Возможно, у вас может быть переменная, которая отслеживает состояние вашей ячейки: нормальное состояние или измененное состояние.

Надеюсь, это поможет.

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