2015-09-29 1 views
0

В таблице вид DetailTableViewController, я использую прототип ячейки из раскадровки. Но в некоторых случаях ячейка прототипа не подходит, поэтому я определил пользовательскую ячейку с наконечником и пользовательский класс ячеек для nib. Затем я регистрирую пользовательскую ячейку nib в методе DetailTableViewController viewDidLoad() со специальным идентификатором повторного использования ячеек. Затем в таблице tableView (_: cellForRowAtIndexPath :), я удаляю пользовательскую ячейку nib для соответствующих условий. и в некоторых случаях я удаляю ячейку прототипа для использования.Почему клетка прототипа влияет на внешний вид пользовательских ячеек, определяемых наконечником?

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

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

Есть ли что-то особенное для прототипа ячейки? как я знаю (from this answer), прототип ячейки - это не что иное, как обычная ячейка nib, определенная в раскадровке. Тогда почему?

+0

Вы можете определить несколько ячеек прототипа в раскадровке, каждый с другим макетом, пользовательским классом и повторным использованием идентификатора. Затем вы просто предоставляете соответствующий идентификатор повторного использования в 'dequeueReusableCellWithIdentifier:' – Paulw11

+0

Большое спасибо, ваш путь лучше. – rrrain

ответ

0

Наконец-то я обнаружил, что это не прототип, который влияет на пользовательскую ячейку. Вместо этого это экземпляр ячейки прототипа, который больше, чем число, необходимое для создания экземпляра пользовательской ячейки. когда в представлении таблицы запрашивается ячейка, я сначала создал экземпляр ячейки прототипа. и затем я проверяю, подходит ли он для indexPath. если нет, я создаю экземпляр пользовательской ячейки и верну его.

Это означает, что некоторые экземпляры ячеек прототипа создаются, но не используются. ячейка экземпляра стоит дорого, Я думаю, что яблоко использует эти неиспользуемые ячейки для повышения производительности (я не уверен в этом). Поэтому они влияют на пользовательский экземпляр ячейки. После исправления этой ошибки все работает нормально. Если кто-нибудь знает причину детализации, напишите здесь. Действительно оценен.

Надеюсь, что этот ответ будет полезен.

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