Как получить программный доступ к различным UIViews в Nib? - PullRequest
0 голосов
/ 19 ноября 2011

Во-первых, я новичок в разработке Objective-C / iOS, и, по сути, этот вопрос относится к моему первому тестовому проекту. Кроме того, я пришел из C # / WinForms, поэтому я перехожу к разработке iOS с некоторыми заранее заданными понятиями дизайна пользовательского интерфейса и состояния приложения. Пожалуйста, потерпите меня и помогите прояснить мое замешательство.

Я только что создал свой первый проект приложения для iOS, который состоит из Single View. Я позволил Xcode создать все файлы для меня с помощью мастера проекта Single View. Когда это было закончено, я открыл свои новые приложения, один UIView Nib-файл в конструкторе, и бросил три ползунка на представление.

Желаемая цель этого приложения очень проста - каждый ползунок соответствует значениям R, G или B, связанным с цветом фона моего вида.

Я выяснил, как установить фон моего представления, но не могу понять, как получить доступ к значениям каждого объекта ползунка. Да, я могу подключиться и ответить на IBAction для каждого ползунка, но я планирую, что каждый раз, когда изменяется значение ползунка, я хочу, чтобы IBAction вызывал рефакторированный метод, который обращается к значениям всех трех ползунков и затем установите цвет фона представлений на основе значений, связанных с каждым из них.

Как получить доступ к значениям моих ползунков? В частности, как я могу получить доступ к значению созданных ползунков, перетаскивая их в окно дизайнера Nib? Я видел код, объясняющий, как программно добавить UISlider к вашему UIView и затем получить доступ к значению, но как вы получите доступ к значению UISlider, которое добавлено к Nib и, я полагаю, будет автоматически "подключен" во время компиляции?

Надеюсь, это делает с тех пор? Если мне не хватает промежуточного шага или критической концепции, пожалуйста, дайте мне знать.

Ответы [ 3 ]

2 голосов
/ 19 ноября 2011

Вы создаете UISlider ivars / properties и делаете их IBOutlets:

@property (nonatomic, retain) IBOutlet UISlider* yourSlider;

Вы синтезируете его в своем файле .m и подключаете IBOutlet в конструкторе интерфейсов.Указатель yourSlider - это ссылка на объект, к которому вы его подключили.Обратите внимание, что он будет загружен только с представлением UIViewController и, следовательно, будет нулевым, пока не будет вызван viewDidLoad.Вы также должны установить значение nil

self.yourSlider = nil;

в вашем методе viewDidUnload (чтобы он был освобожден).В Xcode 4 у вас есть удобный способ сделать все вышеупомянутые шаги в одном действии (см. «Интерфейсный Разработчик встроен» из Что нового в XCode 4 )

1 голос
/ 19 ноября 2011

Аналогично перетаскиванию CTRL + из UISlider в файл .m для создания IBAction, вы можете CTRL + перетащить UISlider из вашего .nib-дизайнера в связанный файл .h и попросить его создать свойство для вас.Затем из вашего файла .m вы можете получить доступ к self.mySlider (или как вы называете это свойство).

На этой странице есть видео , в котором конкретно указывается привязка к UISlider.

0 голосов
/ 13 декабря 2011

Другой подход заключается в использовании свойства тега представления.

@property(nonatomic) NSInteger tag

- (UIView *)viewWithTag:(NSInteger)tag

Вы можете установить свойство тега представления в конструкторе интерфейса и позднее ссылаться на это представление в вашем контроллере.

UIView *myViewFromTag = [self.view viewWithTag:theNumberYouSetInIB];

В общем, лучше придерживаться IBOutlets. Однако есть определенные ситуации, в которых более целесообразно использовать теги.

Удачи!

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