поэтому я следовал этому руководству ("Техника для статического содержимого строки"), чтобы создать свои собственные пользовательские UITableViewCell-s, которые будут содержать одно изображение.
Следующий код взят из моего tableView:cellForRowAtIndexPath:
метода:
UIImageView *imageView = (UIImageView *)[imageViewCell viewWithTag:1];
imageView.image = [UIImage imageNamed:imageName];
cell = imageViewCell;
NSLog(@"%@", cell);
...
return cell;
imageViewCell
относится к моей пользовательской ячейке, созданной в конструкторе интерфейсов. Как видите, я пытаюсь каждый раз менять изображение.
Все работает нормально, но если я использую reloadSections:withRowAnimation:
в UITableView, эта ячейка исчезнет.
Вот вывод консоли:
<UITableViewCell: 0x9c68fe0; frame = (0 0; 302 215); autoresize = RM+BM; layer = <CALayer: 0x4b88110>>
<UITableViewCell: 0x9c68fe0; frame = (0 120; 320 102); autoresize = W; layer = <CALayer: 0x4b88110>>
<UITableViewCell: 0x9c68fe0; frame = (-320 120; 320 102); alpha = 0; autoresize = W; layer = <CALayer: 0x4b88110>>
<UITableViewCell: 0x9c68fe0; frame = (-320 121; 320 105); alpha = 0; autoresize = W; layer = <CALayer: 0x4b88110>>
<UITableViewCell: 0x9c68fe0; frame = (-320 120; 320 111); alpha = 0; autoresize = W; layer = <CALayer: 0x4b88110>>
Так что, как вы можете видеть, его фрейм и альфа изменяются на странные значения и остаются такими же.
Это имеет смысл, потому что я не инициализирую его каждый раз снова, он инициализируется только один раз после пробуждения от пера.
Как мне сбросить его атрибуты, чтобы он снова стал видимым? Я нашел метод с именем prepareForReuse
, но он не сработал. Мне нужно что-то, что сбросило бы альфа и фрейм, чтобы оно появилось снова.
Раствор с загрузочным наконечником каждый раз
Чтобы быть более понятным в моем первом подходе: я создал ячейку табличного представления в кончике контроллера представления. Я настроил розетку, чтобы использовать ее в tableView:cellForRowAtIndexPath:
.
Так как атрибуты ячейки были испорчены после анимации, я подумал, что воссоздание этой ячейки определенно поможет. Проблема была в том, что мое перо было загружено только один раз, и я (до сих пор) не знаю, как сделать что-то вроде повторной инициализации в представлении, которое было инициализировано файлом кончика.
Поэтому я решил создать новый файл пера и загружать его каждый раз. Это не совсем то, что я искал, но это работает. Вот как выглядит код, он очень прост:
[[NSBundle mainBundle] loadNibNamed:@"TestTableCell" owner:self options:nil];
UIImageView *imageView = (UIImageView *)[imageViewCell viewWithTag:1];
imageView.image = [UIImage imageNamed:imageName];
cell = imageViewCell;
imageViewCell = nil; // imageViewCell is still an outlet and setting
// it to nil makes the nib load it again the next
// time - so I'm sure I'll get a new instance.
cell.selectionStyle = UITableViewCellSelectionStyleNone;