2013-05-15 6 views
0

Итак, я смотрю на исходный код проекта iPad Objective-C Xcode, и я новичок в этом, и мне трудно понять, что происходит.Xcode iPad раскадровка

Итак, я смотрю файл MainStoryboard_ipad.storyboard, который показывает все различные кнопки и все, что они будут отображаться на экране iPad.

Как мне «связать» каждую из этих графических кнопок с помощью метода, который что-то делает, когда я нажимаю эту конкретную кнопку? В программе есть два других файла: _ .h/m, которые, как представляется, включают методы, относящиеся к кнопкам, но я не вижу, как именно.

Может ли кто-нибудь здесь объяснить процесс или показать мне ссылку с (очень понятным и понятным) руководством?

+0

Это потребует немного объяснений, поэтому, наверное, лучше всего посмотреть некоторые видеоуроки на iOS/XCode на Youtube или где-то вроде Pluralsight: http://pluralsight.com/training –

+0

Обычно вы нажимаете правой кнопкой мыши на ваш выход (кнопка и т. д.) в раскадровке и перетащите его в .h-файл – Stas

ответ

1

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

Обычный способ является то, что вы объявляете свойство типа объекта (то есть. UIButton) в пределах .h файла соответствующего класса контроллера представления (A UIViewController подкласса или UITableViewController соответственно). Ключом является добавить к нему ключевое слово IBOutlet.

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

В файле .h (и в файле .m, если вы его там синтезируете) ваше соединение подтверждается точкой в ​​круге слева от объявления. Это пустой круг, когда свойство не связано. Нет никакого круга, когда свойство не помечено как IBOutlet.

Теперь, когда вы получаете доступ к свойству изнутри (или без - возможно, но не рекомендуется) контроллера вида, он должен отличаться от нуля в большинстве методов (методы viewDidLoad и follwonig). Вы можете получить или установить значения, и, установив их, вы фактически измените соответствующий элемент пользовательского интерфейса на экране.

Многие элементы пользовательского интерфейса являются элементами управления (подклассы UIControl, например, UIButton) и имеют назначенные действия. Вызывая действие, элемент управления отправляет сообщение своему контроллеру, что пользователь сделал что-то интересное. Пользователь, возможно, изменил значение UISwitch или нажал UIButton. Это очень похоже на свойства. Объявите метод. Нет необходимости делать это в .h, но я все еще придерживаюсь этой схемы. Начните вводить - (IBAction) someName, и автозаполнение проведет вас. Вы можете видеть (IBAction) как синоним для (void), но он сообщает IDE xcode, что это должно быть связано с элементом управления как действие. IBActions получают один параметр типа (id) или (UIView) или (UIControl). (Я не совсем уверен в фактическом типе). Ключ состоит в том, что он получает ссылку на сам экземпляр управления, на котором было выполнено действие - отправителя. Типичная картина:

-(IBAction) myButtonWasPressed:(UIButton *)sender; 

Вы можете писать книги о том, разумно ли typcast его UIButton на этом этапе или нет. Однако он работает, но вы должны протестировать внутри метода и убедиться, что он действительно является UIButton (например, с помощью isKindOfClass:[UIButton class]), прежде чем вы получите доступ к любому свойству или методу, уникальному для UIButtons.Если вы просто отреагируете на вызов IBAction beeing и не получаете доступ к отправителю вообще, вы можете игнорировать отправителя или даже опустить параметр. Я думаю, что следующее должно работать также: - (IBAction) myButtonWasPressed;

Конечно, вам нужно реализовать метод в файле .m.

Вы связываете это действие с элементом управления так же, как свойство, перетаскивая строку внутри IB. В случае кнопки вам будет предложено назначить это событие. Для кнопок событие touchUpInside - неплохой выбор. Вы могли бы заявить одно и то же действие для ряда событий, если обнаружите, что у вас есть причины для этого. (Не могу думать о какой-либо причине, но она работает хорошо).

+0

Спасибо за ваш ответ! Это было очень полезно и информативно. – user1782677

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