Как обновить UITableViewCell? - PullRequest
8 голосов
/ 04 июня 2009

У меня есть UITableView с пользовательским UITableViewCell. В cellForRowAtIndexPath я назначаю шрифт метке в каждой ячейке, поскольку пользователь может изменить размер шрифта в любое время. Чтобы изменить размер шрифта, пользователь нажимает кнопку под табличным представлением, которая отображает другое представление с настройками. После того, как они выбрали размер шрифта и щелкнули по кнопке «Готово», это представление исчезает, и снова отображается таблица. Я отображаю одну ячейку на область просмотра. Таким образом, пользователь не увидит изменения шрифта, пока не перейдет к следующей ячейке. Я хочу обновить текущую ячейку.

Я пробовал reloadData с экрана настроек, но это не сработало. Табличное представление является UITableViewController, но viewWillAppear никогда не запускается, когда экран настроек исчезает. Я попытался сделать пользовательскую ячейку свойством табличного представления, чтобы к нему можно было получить доступ из представления настроек, затем вызвать setNeedsDisplay и setNeedsLayout. Это тоже не сработало. Есть предложения?

Ответы [ 3 ]

12 голосов
/ 03 июля 2009

В вашем пользовательском UITableViewCell вызовите [self setNeedsLayout];, и он должен перекрасить вашу ячейку в следующем цикле. Я использую его для асинхронной загрузки изображений, так как я извлекаю изображение из Интернета, и оно работает безупречно.

5 голосов
/ 04 июня 2009

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

После изменения размера шрифта сделайте что-то вроде:

for (MyCell* cell in [theTableView visibleCells]) {
    [cell.myLabel.font = newFont];
}
0 голосов
/ 04 июня 2009

Мне интересно, как вы отображаете экран настроек? viewWillAppear должен быть вызван при нормальных обстоятельствах при возвращении. Используете ли вы

[self presentModelViewController:animated:]

или

[self.navigationController pushViewController:animated:]

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

Так что, если вы не используете один из этих двух методов, сделайте. Если вы уже это сделали, то установить шрифт ячейки так же просто, как получить ячейку и установить ее шрифт. Если вы используете стандартный UITableViewCell, это делается с

cell.font = newFont;

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

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