Сборка UIView в Интерфейсном Разработчике связана с моим пользовательским UIViewController - PullRequest
2 голосов
/ 21 сентября 2010

Я пытался использовать IB немного по-другому, чем я привык, и я не могу заставить его работать, расширяя обычный подход, который я использую, при работе с IB.

Вместо создания новогоUIViewController и иметь созданный для меня вид XIB и все, что связано Xcode, я хотел бы просто создать небольшой (320x40px) вид XIB и связать его с моим уже существующим ViewController.

Я начинаю с созданияНовый файл в Xcode, выберите «Просмотр XIB».Затем я открываю IB, добавляю некоторые метки и т. Д. В вид и устанавливаю «Владелец файлов» в качестве моего существующего ViewController.В моем существующем ViewController я установил IBOutlets для меток и т. Д., Которые я добавил в свое представление.Я возвращаюсь в IB и подключаю UILabels к своим выходам в «Владельце файлов».

Теперь я думаю, что у меня есть ссылка на метки внутри XIB в моем viewController.Это не совсем тот подход, который мне нужен, я не вижу необходимости, чтобы мой viewController имел ссылку на метки внутри моего представления.

Как я обычно делаю в коде:

Мой ViewController управляет связкой UIViews, созданных полностью в коде, и создает их экземпляры с помощью:

UIView *customView = [[CustomView alloc] initWithFrame:aFrame];
[customView setTag:MY_CUSTOM_VIEW];
[customView setDelegate:self];
[self.view addSubView:customView];
[customView release];

После этого я получу доступ к меткам, кнопкам и т. Д. Из моего контроллера с помощью [(UILabel*)[[self.view viewWithTag:MY_CUSTOM_VIEW] myLabel] setText@"Hello, World"];UIViewController реализует все методы, которые требовал протокол customView.

Как получить эту функциональность с помощью IB

Должен ли я сначала создать класс MyCustomView, расширяющий класс UIView, иметь еговсе мои IBOutlets, установить MyCustomClass в качестве владельца файлов, а затем создать экземпляр, как показано выше?Можно ли, чтобы представление выступало в качестве viewController для представления IB, и как бы я передавал действия моему «реальному» viewController?

Чего я хотел бы добиться, так это иметь дело с созданием экземпляров и планировкойнесколько UIViews в моем коде UIViewControllers, но у меня есть свобода конструировать некоторые из этих UIViews в IB.

Вся информация, которую я могу найти, относится к стандарту «создать UIViewController с XIB для представления»или "Как создавать библиотеки компонентов IB".

Надеюсь, это имеет смысл и спасибо за любую помощь:)

1 Ответ

1 голос
/ 21 сентября 2010

Вы можете создать любую структуру представления, которую вы хотите, в Интерфейсном Разработчике, а затем создать ее экземпляр, используя класс UINib . Как только вы создаете объект UINib, он загружает содержимое из пера и сохраняет их. Затем, всякий раз, когда вы отправляете ему сообщение instantiateWithOwner:options:, оно создает экземпляры объектов, содержащихся в xib, и возвращает массив с представлениями верхнего уровня. Затем вы можете добавить эти представления в иерархию представлений и обрабатывать их так же, как и любое другое представление, созданное вами программно.

Если вы сохраняете объект UINib (например, как свойство), вы можете создавать экземпляры содержимого снова и снова, что позволяет использовать xib в качестве шаблона.

обновление: Обходное решение до iOS 4 см. мой недавний вопрос и ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...