2010-09-21 5 views
2

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

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

Я начинаю с создания нового файла в Xcode, выберите «view 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] [email protected]"Hello, World"]; имеют мой UIViewController, реализующий все методы, необходимые для протокола customView.

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

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

То, что я хотел бы достичь, - это обработать несколько экземпляров UIView в моем коде UIViewControllers, но иметь свободу проектирования некоторых из этих UIView в IB.

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

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

ответ

1

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

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

обновление: Для обхода обхода IOS 4 см. my recent question and answer.

+0

Thank You Toastor, этот звук, как будто мне нужно. Я заметил в документации, что это дополнение iOS 4.0, не будет ли оно работать на устройстве под управлением 3.x? Кроме того, в документации не упоминается, как вы должны строить NIB (имея дело с выходами и т. Д.), Если нужно обернуть просмотр NIB. Не могли бы вы указать мне на ресурс, где я мог бы увидеть, как эта функция реализована. Еще раз спасибо. – RickiG

+0

Мне жаль, что я не знаю никакого источника, я сам все понял. Внутри вашего наконечника вы можете указать владельца файла как обычно и сделать соответствующие соединения. Тем не менее, они будут одинаковыми для всех экземпляров, поэтому вам нужно установить теги на свои новые представления сразу после создания экземпляра, чтобы иметь возможность различать их позже. Что касается замены до iOS 4 - у меня был тот же самый вопрос. Я сразу же обновлю ответ на ссылку на вопрос и ответ. – Toastor

+0

Вы делаете это так, как будто бы для любого наконечника. Скажем, у вас есть viewcontroller и добавьте содержимое пениса в представление VC. У VC есть метод '- (IBAction) buttonPressed: (id) отправитель;'. Если в вашем nib вы добавите кнопку и установите владельца файла в ваш подкласс VC, вы можете подключить действие к кнопке, как обычно. Метод действия будет вызываться при нажатии любого экземпляра этой кнопки, поэтому вам нужны теги, если вы создаете экземпляр более чем один раз. В противном случае вы не знаете, какая кнопка была нажата. – Toastor

Смежные вопросы