Як я розумію, ви хочете:
- Створіть комірку в IB, яку можна використовувати в декількох сценах розкадрування.
- Налаштуйте унікальні розділи розкадровки з цієї комірки, залежно від сцени, в якій знаходиться камера.
На жаль, наразі цього неможливо зробити. Щоб зрозуміти, чому ваші попередні спроби не працювали, вам слід більше зрозуміти, як працюють розкадровки та прототипи комірок табличного подання. (Якщо вам байдуже, чому ці інші спроби не спрацювали, сміливо йдіть зараз. У мене немає для вас магічних обхідних шляхів, крім того, щоб запропонувати вам подати помилку.)
По суті, розкадровка - це не набагато більше, ніж колекція файлів .xib. Коли ви завантажуєте контролер подання таблиці, який має кілька комірок прототипу з розкадрування, ось що відбувається:
- Кожна комірка-прототип насправді є власним вбудованим міні-пером. Отже, коли контролер подання таблиці завантажується, він проходить через кожну з перил та викликів комірки прототипу
-[UITableView registerNib:forCellReuseIdentifier:]
.
- Вигляд таблиці запитує контролер для комірок.
- Ви, мабуть, телефонуєте
-[UITableView dequeueReusableCellWithIdentifier:]
Коли ви запитуєте комірку із заданим ідентифікатором повторного використання, вона перевіряє, чи зареєстровано перо. Якщо це так, він створює екземпляр екземпляра цієї комірки. Це складається з наступних кроків:
- Подивіться на клас клітини, як визначено в пероці клітини. Телефонуйте
[[CellClass alloc] initWithCoder:]
.
-initWithCoder:
Метод проходить і додає подпанелі і набори властивостей , які були визначені в бобах. ( IBOutlet
можливо, і тут зачепиться, хоча я цього не перевіряв; це може статися в -awakeFromNib
)
Ви налаштовуєте клітинку як завгодно.
Тут важливо відзначити, що існує різниця між класом клітини та візуальним виглядом клітини. Ви можете створити дві окремі комірки прототипу одного класу, але з їхніми поданнями, викладеними абсолютно по-різному. Насправді, якщо ви використовуєте UITableViewCell
стилі за замовчуванням , це саме те, що відбувається. Наприклад, стиль "За замовчуванням" і "Субтитри" представлені одним UITableViewCell
класом.
Це важливо : Клас комірки не має індивідуальної кореляції з певною ієрархією подання . Ієрархія подання повністю визначається тим, що знаходиться в комірці прототипу, яка була зареєстрована у цьому конкретному контролері.
Також зауважте, що ідентифікатор повторного використання клітинки не був зареєстрований у якомусь глобальному диспансері клітин. Ідентифікатор повторного використання використовується лише в контексті одного UITableView
екземпляра.
Беручи до уваги цю інформацію, давайте розглянемо, що сталося у ваших вищезазначених спробах.
У Controller # 1 додав комірку прототипу, встановив клас для мого підкласу UITableViewCell, встановив ідентифікатор повторного використання, додав мітки та підвів їх до розеток класу. У контролері №2 додано порожню комірку прототипу, встановлено його в той самий клас і повторно використаний ідентифікатор, як і раніше. Під час запуску мітки ніколи не з’являються, коли комірки відображаються в контролері №2. Прекрасно працює в контролері №1.
Це очікується. Хоча обидві комірки мали один і той самий клас, ієрархія подання, яка передавалась комірці в контролері №2, була повністю позбавлена підпрозорів. Отже, ви отримали порожню клітинку, що саме те, що ви помістили в прототип.
Розроблено кожен тип комірок в іншому NIB і підключено до відповідного класу комірок. У раскадровці додано порожню комірку прототипу та встановлено її клас та повторне використання ідентифікатора для посилання на мій клас комірки. У методах viewDidLoad контролерів зареєстровано ці файли NIB для ідентифікатора повторного використання. Коли показано, комірки в обох контролерах були порожніми, як у прототипу.
Знову ж цього очікуємо. Ідентифікатор повторного використання не використовується спільно між сценаріями розкадрувань або перонами, тому той факт, що всі ці окремі клітинки мали однаковий ідентифікатор повторного використання, не мав сенсу. Клітинка, яку ви повернете з табличного подання, матиме вигляд, який відповідає комірці прототипу в цій сцені розкадрування.
Однак це рішення було близьким. Як ви вже зазначали, ви можете просто програмно зателефонувати -[UITableView registerNib:forCellReuseIdentifier:]
, передавши UINib
міститься комірку, і отримаєте ту саму комірку. (Це не тому, що прототип «перекривав» перо; ви просто не зареєстрували перо в режимі таблиці, тому він все ще дивився на перо, вбудоване в розкадрування.) На жаль, такий підхід має недолік - немає можливості підключити сюжети розкадровки до клітини в автономному перо.
Зберігав прототипи в обох контролерах, порожній і встановив клас, і повторно використовував ідентифікатор для мого класу комірки. Побудований користувальницький інтерфейс комірок повністю в коді. Клітини чудово працюють у всіх контролерах.
Природно. Сподіваємось, це не дивно.
Отже, тому це не спрацювало. Ви можете проектувати свої клітини в автономних перочках і використовувати їх у кількох сценах розкадровки; ви просто не можете в даний час підключити до цих клітин розділи розкадровки. Сподіваємось, однак, ви щось дізналися в процесі читання цього.