tabBar viewControllers в IB: отправлять пользовательские init? - PullRequest
3 голосов
/ 06 марта 2009

В приложении на основе tabBarController есть несколько вкладок. У каждого есть свой класс viewController, единственное отличие состоит в том, как инициализируется экземпляр. Есть ли способ заставить конструктор интерфейса отправлять на разные вкладки пользовательские параметры инициализации?

В настоящее время я делаю инициализацию в viewWillAppear, но по ряду причин имеет смысл сделать это в IB, а не в коде.

Есть предложения?

спасибо, Келсо

Ответы [ 2 ]

3 голосов
/ 12 марта 2009

Interface Builder создает архив объектов, который не архивируется при выполнении вашей программы. Вы не можете сказать IB, чтобы он вызывал определенные методы.

Если вам нужно инициализировать до вызова viewWillAppear:, вы можете сделать это в awakeFromNib, который гарантированно будет вызван после того, как все объекты были загружены и все выходы подключены к их целям.

Если вы хотите выполнить инициализацию еще раньше, вы можете сделать это, переопределив initWithCoder: (см. Документацию NSCoding). Я не знаю, документировано ли это где-либо, но это назначенный инициализированный объект, декодируемый из архива.

Во всем вышеперечисленном вы не сможете получать параметры, но в коде вы должны иметь доступ к тому, что вам нужно, с некоторым разумным использованием глобальных переменных. Вы также можете использовать [[UIApplication sharedApplication] delegate] для получения доступа к объекту делегата приложения.

0 голосов
/ 07 марта 2009

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

...