2009-06-04 3 views
8

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

Я попробовал reloadData с экрана настроек, но это не сработало. TableView - это UITableViewController, но viewWillAppear никогда не срабатывает, как только экран настроек уходит. Я пробовал сделать пользовательскую ячейку свойством tableview, чтобы к ней можно было получить доступ из представления настроек, а затем вызвать setNeedsDisplay и setNeedsLayout. Они тоже не работали. Какие-либо предложения?

ответ

5

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

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

for (MyCell* cell in [theTableView visibleCells]) { 
    [cell.myLabel.font = newFont]; 
} 
+0

Я попробовал свой код в представлении настроек, но все равно никаких изменений в текущей ячейке после отображения таблицы. Если все, что я делаю, это вызов reloadData в представлении таблицы из представления настроек, он отлично работает. Тем не менее, это похоже на очень дорогостоящий, способный сделать это. – 4thSpace

+0

Я отредактировал свой ответ после лучшего понимания проблемы. –

+0

Большое спасибо! – Luda

0

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

[self presentModelViewController:animated:] 

или

[self.navigationController pushViewController:animated:] 

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

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

cell.font = newFont; 

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

+0

Я использую presentModalViewController. Решение ниже работало нормально. – 4thSpace

12

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

+0

Это сработало для меня, спасибо. У меня есть KVO, где я бы предпочел перезагрузить только одну ячейку, так что это работает хорошо. – Sam

Смежные вопросы