У меня была очень похожая проблема с вами в том, что я заметил, что объекты VC не все созданы равными! У меня проблема с настройкой элементов панели навигации, я просто не могу этого сделать, когда Владелец Файла является объектом контроллера представления, который я создаю программно. Это работает, только если я разархивирую объекты контроллера IB.
Я скачал ваш проект и поиграл с ним, и он заставил меня задуматься о том, что может происходить. Я думаю, что могу дать разумный ответ, но не уверен, есть ли простое решение ...
Я считаю, что Apple создала эти объекты контроллера в IB, которые немного более специализированы. Одно из предположений, что это может быть правдой, заключается в том, что объекты IB VC имеют атрибут, который вы можете установить, который не имеет прямого соответствующего свойства для класса UIViewController, который я вижу, поэтому объекты контроллера IB могут иметь некоторые дополнительные функции, которые не могут быть подклассами UIViewController не-IB извлекать выгоду. Принимая во внимание, что объекты в .xib являются полными «замороженными» объектами, Apple, возможно, включила все виды закрытых атрибутов, которые мы не можем видеть или использовать в их версиях IB - это может иметь некоторый эффект на то, как инициализируются объекты .
Например, в вашем MainWindow.xib
выберите объект IB VC, и вы можете установить для него атрибуты из палитры инспектора, такие как «Изменить размер представления из NIB». Если вы отмените это и повторно запустите свое приложение, вы увидите, что VC выглядит точно так же, как в сценарии B. Так как вы не можете проверить этот элемент из атрибутов Владельца файла (даже если это UIViewController) ), вы не можете воспользоваться тем, что делается контроллером представления, чтобы дать вам желаемое поведение.
Результатом этого является то, что когда вы используете TestViewController.xib
для инициализации вашего объекта VC в коде, ни один из специфических атрибутов IB VC не устанавливается, поэтому создается стандартный болотный UIViewController, и поэтому такие вещи, как " Атрибут Resize View From NIB "и настройка элементов навигации должны быть реализованы самостоятельно.
Я еще не нашел способа воспользоваться преимуществами функциональности контроллеров представления IB, когда я создаю их экземпляры с помощью initWithNibName:bundle:nibBundle
(я полагаю, что это все личные вещи, к которым мы не можем получить доступ), но, надеюсь, это может дал вам отправную точку ...
Конечно, я могу быть совершенно неправ, и кто-то заставит меня выглядеть как полный идиот!
Пол