Переименовать файл XIB без потери выходного соединения - PullRequest
0 голосов
/ 10 октября 2018

Во-первых, я решил не работать с раскадровками, так как я привык работать только с кодом (я из Java).Итак, вот поведение, которое я не понимаю:

1 / Я создаю файл .xib, содержащий представление и, скажем, кнопку.

2 / Я создаю ViewController (как я понял: один xib-файл, содержащий много подпредставлений, связан с одним viewController)

3 / Я устанавливаю владельца файла моей xib в класс viewcontroller

4 / Я создаю розетку между кнопкой и ViewController, перетаскивая «магию» xcode.

Здесь все работает нормально: в начале моего ViewDidLoad () розетка была установлена ​​как UIButton, когда я запускаю приложение, и я могу использовать его

5 / I переименуйте файл xib

6 / Выходной сигнал равен нулю, когда я запускаю приложение в начале ViewDidLoad () .В этом проблема.

Я не понимаю, почему.Владелец файла xib остается тем же самым, он все еще мой viewcontroller.swift (я не переименовал класс viewcontroller, а только xib), так почему этот viewcontroller не может увидеть, каков его вид, выполняя поиск того, какой xib он сейчас владеет ??Я пытался очистить проект, закрыть его, даже перезагрузить ноутбук, но ничего не изменилось. Возможно, я что-то пропустил, потому что это ненормально, что я не могу переименовать файл xib без необходимости воссоздания другого файла viewcontroller?

Я определенно не привык работать с графическим интерфейсом, и я был рад видеть, что многие разработчики не слишком.Можете ли вы посоветовать мне несколько советов по созданию приложения без раскадровок, используя только xib-файлы, такие как «HTML», и все остальное в коде?

Спасибо

1 Ответ

0 голосов
/ 10 октября 2018

Пользовательский класс заполнителя-владельца файла в xib имеет только один эффект: он сообщает Interface Builder (часть Xcode-редактора xib), какие выходы и действия следует предлагать для заполнителя-владельца файла.Пользовательский класс владельца файла не влияет на то, как ваш контроллер представления находит свой файл пера во время выполнения.

(файл xib - это документ на основе XML, который вы редактируете в Interface Builder; файл пераявляется скомпилированной версией файла xib и входит в комплект вашего приложения.)

Документация UIViewController.nibName говорит вам, что вам нужно знать:

Это свойство содержит значение, указанное во время инициализации для метода initWithNibName:bundle:.Значение этого свойства может быть nil.

Если вы используете файл пера для хранения представления вашего контроллера представления, рекомендуется явно указывать этот файл пера при инициализации вашего контроллера представления.Однако, если вы не укажете имя пера и не переопределите метод loadView в своем пользовательском подклассе, контроллер представления ищет файл пера, используя другие средства.В частности, он ищет файл пера с соответствующим именем (без расширения .nib) и загружает этот файл пера всякий раз, когда запрашивается его представление.В частности, он ищет (по порядку) файл пера с одним из следующих имен:

  1. Если имя класса контроллера представления заканчивается словом 'Controller', как в MyViewController, он ищет файл пера, имя которого совпадает с именем класса без слова «Контроллер», как в MyView.nib.

  2. Он ищет файл пера, имя которого соответствует именикласс контроллера представления.Например, если имя класса MyViewController, он ищет файл MyViewController.nib.

Итак, если вы переименовали свой xib, а теперь выходnil, тогда ваш контроллер представления, вероятно, вообще не загружает файл пера , по одной или нескольким из следующих причин:

  1. Вы передали имя пера вUIViewController.init(nibName:bundle:) инициализатор, и это имя пера неверно.

  2. Вы передали nil инициализатору UIViewController.init(nibName:bundle:), и ни одно из правил именования, описанных в документации nibName, не соответствует вашему переименованномуИмя файла xib.

Вот несколько возможных решений:

  1. Передайте переименованное имя файла xib (без расширения .xib) вUIViewController.init(nibName:bundle:) initializer.

  2. Переопределите свойство nibName в своем подклассе UIViewController, чтобы вернуть переименованное имя файла xib (без расширения .xib).

  3. Переименуйте файл xib в соответствии с одним из правил, описанных в документации nibName.

...