UIButton в заголовке раздела UITable Не обновляется

#iphone #cocoa-touch

#iPhone #cocoa-touch

Вопрос:

У меня есть простой UITableView с двумя разделами. У каждого раздела есть заголовок, который отображается правильно.

Во втором разделе в его заголовке есть UIButton (а также UILabel) — представление заголовка раздела загружается из xib-файла — опять же, он отлично просматривается, и кнопка реагирует на нажатие и вызывает мое IBAction.

В каждой ячейке таблицы в этом разделе также есть кнопка. При нажатии на одну из этих кнопок я обновляю текст в кнопке в заголовке раздела с помощью количества. Для фона каждая ячейка таблицы представляет контакт, и нажатие кнопки в данной ячейке добавляет этот контакт в список, а нажатие кнопки в заголовке раздела выполнит действие со всеми контактами в списке.

Суть в том, что при первом отображении tableview нажатие кнопки в ячейках корректно обновляет текст кнопки заголовка раздела сразу. Как только я прокручиваю таблицу, даже немного, и нажимаю кнопки, текст кнопки заголовка раздела больше не обновляется.

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

Я попытался выполнить обновление в главном потоке, в блоке асинхронной отправки, вызвав setNeedsDisplay / Layout и т.д. Он отказывается обновляться, если я не переверну таблицу.

Вызов reloadData в таблице после обновления текста кнопки работает, но это кажется ужасно тяжелым.

Спасибо за любую информацию…

Код, обновляющий текст кнопки:

    NSString *l = NSLocalizedString(@"INVITE_LABEL", nil);
   NSString *label = [NSString stringWithFormat:l, [invitedEmails count]];
   [inviteSelectedButton setTitle:label forState:UIControlStateNormal];
  

Вызывая это из IBAction события нажатия кнопки просмотра таблицы. Если я добавлю к этому коду суффикс с:

    [self.viewController.addressBookTable reloadData];
  

приведенный выше код работает сразу же каждый раз.

Комментарии:

1. Возможно, опубликуйте какой-нибудь код, чтобы мы могли видеть, о чем вы говорите.

Ответ №1:

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

Я не уверен, поможет ли это вам с вашей проблемой, но, возможно, это приведет к решению.