#ios #uitableview #uilabel
#iOS #uitableview #uilabel
Вопрос:
Я знаю, что есть похожие вопросы, подобные этому, но они не работают для меня!
У меня дублируются мои строки, и текст UILabel становится все более жирным, когда пользователь возвращается на любую вкладку с табличными представлениями.
Вот код cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = (CustomCell *)
[tableView dequeueReusableCellWithIdentifier:CellClassName];
if (cell == nil)
{
NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
cell = [topLevelItems objectAtIndex:0];
}
cell.subnavName.text = [array objectAtIndex:[indexPath section]];
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"subnavigation_off.png"]];
[cell setBackgroundView:background];
background = [[UIImageView alloc]
initWithImage:[UIImage imageNamed:@"subnavigation_on.png"]];
cell.selectedBackgroundView = background;
[background release];
return cell;
}
Что я могу сделать, чтобы текст из UILabel не добавлялся снова в мои ячейки, когда пользователь возвращается на эту вкладку из другой? Я что-то читал об использовании тега, но не могу найти способ это сделать.
Большое вам спасибо!
Ответ №1:
Оооочень классическая ошибка.
Проблема (как и всегда в вопросах TableView здесь) заключается в том, что вы неправильно используете механизм повторного использования TableViewCells.
Вы должны попытаться удалить из очереди (переработать) существующую ячейку, и если она не возвращает ячейку (tableview не удалось переработать старую — уже выделенную, но больше не используемую — ячейку), затем выделите ее и настройте каждое свойство, которое будет общим для всех ваших ячеек (шрифт метки, добавление вложенных представлений, изменение цветов и т.д.).
Затем, помимо «если» — независимо от того, является ли ячейка недавно выделенной или ячейкой, которая была переработана (из ранее выделенной, но больше не используемой ячейки), во всех случаях — заполните ячейку конкретным содержимым, которое зависит от indexPath (текст, изображение и т.д.)
Прочитайте руководство по программированию табличного представления в документации Apple и выполните поиск в StackOverflow. Также есть много вопросов о tableViews, которые все имеют одну и ту же проблему.
Комментарии:
1. Я изменил это, и это все еще не работает, не могли бы вы, пожалуйста, отредактировать мой код выше? Спасибо заранее.
2. Я не вижу никаких изменений в вашем коде выше. В качестве примеров того, как это реализовать, найдите StackOverflow о
UITableView
, есть множество примеров кода о том, как реализоватьtableView:cellForRowAtIndexPath:
и этуif
ветку, и я сам объяснял это несколько раз здесь.3. Хорошо, я изменил код своего приложения, а не там. Только что отредактировано. Спасибо 🙂
4. Что за ерунда?! Зачем весь этот бесполезный код? Цикл for, чтобы определить, какое значение
i
равноindexPath.section
вместо того, чтобы просто использоватьindexPath.section
напрямую ?! И у вас также есть утечки в первом изображении, которое вы назначаете вbackground
переменной… И все же «все еще работает» — это не диагностика. Не могу помочь без дополнительной информации. Добавляйте точки останова в свой код и отлаживайте его шаг за шагом (или NSLog it), это должно быть более понятным для вас.5. Почему бы вам не изменить мой код, чтобы я научился делать это правильно и мне не нужно было спрашивать снова? Спасибо за вашу помощь. Извините, потому что я не такой хороший программист, как вы. Я уверен, что вы не родились, зная, как программировать.