Почему я не могу добавить файлы XIB в качестве подпредставлений к моей основной XIB? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть основной xib файл, и я хотел бы добавить / повторно использовать subview xib-файлы (например, android studios fragments). Я протестировал только простой файл xib с розовым фоновым цветом, и он работает с использованием этого кода:

UINib *nib = [UINib nibWithNibName:@"testXib" bundle:nil];

UIView *sub = [nib instantiateWithOwner:nil options:nil][0];

[containerOutlet addSubview:sub];

[NSLayoutConstraint activateConstraints:@[
    [sub.leadingAnchor constraintEqualToAnchor:containerOutlet.leadingAnchor],
    [sub.trailingAnchor constraintEqualToAnchor:containerOutlet.trailingAnchor],
    [sub.topAnchor constraintEqualToAnchor:containerOutlet.topAnchor],
    [sub.bottomAnchor constraintEqualToAnchor:containerOutlet.bottomAnchor]
]];

Это представляет мой цветной xib в моем основном xib. Но как только я пытаюсь добавить какой-либо из существующих xib файлов, приложение вылетает с этой ошибкой:

Завершение работы приложения из-за необработанного исключения 'NSUnknownKeyException', причина: '[ setValue: forUndefinedKey:]: этот класс не соответствует значению ключа, соответствующему кодированию для ключа activityIndicatorView. '

Последняя часть: ActivityIndicatorView изменяется в зависимости от того, какой файл xib я пытаюсь выполнитьнагрузить. Иногда это «ViewingNumberBanner» или что-то еще.

Файлы xib более сложны, чем рабочий тест - xib, поэтому, очевидно, я кое-что упустил. Проблема в том, что я не знаю с чего начать. Я, вероятно, должен упомянуть, что все файлы xib работают сами по себе, когда используются в обычном режиме. Дайте мне знать, если вы хотите узнать что-то еще, что может быть полезным.

enter image description here

В качестве иллюстрации я включил картинку.

  1. Имя файла. Это имя я использую в nibWithNibName:@"SecondView"

  2. Это xib не имеет class, связанного с ним. Но, похоже, у него есть вид с большим количеством xib файлов, если я не ошибаюсь (см. В левой части экрана).

  3. Это имеет classColleagueTableViewController связан с ним. Это xib Я хотел бы загрузить. Я не знаю, если это index [0], когда я использую instantiateWithOwner, я только догадываюсь. Откуда я знаю наверняка?

1 Ответ

0 голосов
/ 07 октября 2019

При длинном просмотре здесь есть две проблемы:

  • Никто не должен хранить контроллеры представления в файле .xib . Вот для чего нужны файлы .storyboard . Даже если вы не используете сегменты, раскадровки позволяют создавать экземпляры контроллера представления по идентификатору, чего нельзя сделать с файлом .xib . Плюс много других полезных вещей.

  • Если вы хотите загрузить иерархии представлений из файла .xib , представление должно быть единственным вчто .xib . Затем вы просто загружаете его без владельца, вынимаете первый вид и используете его в своем интерфейсе. Если у вас есть несколько таких представлений, которые вы хотите загрузить, используйте одно на .xib .

...