IBOutlet и IBAction - PullRequest
       81

IBOutlet и IBAction

155 голосов
/ 29 октября 2009

Какова цель использования IBAction и IBOutlet в кодировании Objective-C для iPhone, имеет ли какое-то значение, если я их не использую?

Ответы [ 9 ]

203 голосов
/ 29 октября 2009

IBAction и IBOutlet - это макросы, определенные для обозначения переменных и методов, на которые можно ссылаться в Интерфейсном Разработчике.

IBAction разрешается в void, а IBOutlet разрешается в ничто, но они означают для Xcode и Interface Builder, что эти переменные и методы можно использовать в Interface Builder для связи элементов пользовательского интерфейса с вашим кодом.

Если вы вообще не собираетесь использовать Interface Builder, тогда они вам не нужны в вашем коде, но если вы собираетесь его использовать, вам нужно указать IBAction для методов, которые будут используется в IB и IBOutlet для объектов, которые будут использоваться в IB.

38 голосов
/ 12 декабря 2010

Традиционный способ пометить метод, чтобы он появился в Интерфейсном Разработчике, и вы можете перетащить соединение с ним, состоял в том, чтобы заставить метод возвращать тип IBAction.Однако, если вместо этого вы сделаете свой метод недействительным (IBAction равен # define'd быть пустым) и предоставите аргумент (id), метод все равно будет виден.Это обеспечивает дополнительную гибкость, все

Все 3 из них видны из Интерфейсного Разработчика:

-(void) someMethod1:(id) sender; 
-(IBAction) someMethod2; 
-(IBAction) someMethod3:(id) sender;

Подробнее см. В Руководстве пользователя Интерфейсного Разработчика Apple, особенно раздел, озаглавленный Интеграция XCode.

32 голосов
/ 29 октября 2009

Вам необходимо использовать IBOutlet и IBAction, если вы используете конструктор интерфейса (отсюда префикс IB) для компонентов GUI. IBOutlet необходим для связи свойств вашего приложения с компонентами в IB, а IBAction используется для того, чтобы ваши методы могли быть связаны с действиями в IB.

Например, предположим, что вы определяете кнопку и метку в IB. Чтобы динамически изменить значение метки, нажав кнопку, вы определите действие и свойство в своем приложении, например:

UILabel IBOutlet *myLabel;
-(IBAction) pushme;

Тогда в IB вы должны соединить myLabel с меткой и подключить метод pushme с помощью кнопки. Вам нужны IBAction и IBOutlet, чтобы эти соединения существовали в IB.

6 голосов
/ 29 октября 2009

Интерфейсный Разработчик использует их, чтобы определить, какие элементы и сообщения могут быть «подключены» к элементам управления интерфейса, которые вы используете в своем окне / представлении.

IBOutlet и IBAction присутствуют исключительно как маркеры, которые ищет Интерфейсный Разработчик, когда он анализирует ваш код во время разработки, они не оказывают никакого влияния на код, сгенерированный компилятором.

4 голосов
/ 18 апреля 2016

Наткнулся на диаграмму, глядя на кодирование значения ключа, подумал, что это может кому-то помочь. Это помогает понять, что такое IBOutlet.

Глядя на поток, можно увидеть, что IBOutlets существуют только для того, чтобы сопоставить имя свойства с именем элемента управления в файле Nib.

How nib file is loaded, screenshot of Matt's online book for iOS6

4 голосов
/ 10 августа 2012

Outlet - это ссылка из кода на пользовательский интерфейс. Если вы хотите показать или скрыть элемент пользовательского интерфейса, если вы хотите получить текст текстового поля или включить или отключить элемент (или сотню других вещей), вы должны определить выход этого объекта в источниках и связать этот выход через «объект интерфейса» к элементу пользовательского интерфейса. После этого вы можете использовать выход, как и любую другую переменную в коде.

IBAction - специальный метод, запускаемый объектами пользовательского интерфейса. Интерфейсный Разработчик распознает их.

@interface Controller
{
  IBOutlet id textField; // links to TextField UI object
}

- (IBAction)doAction:(id)sender; // e.g. called when button pushed

Для получения дополнительной информации см. Документы Apple

3 голосов
/ 29 октября 2009

IBAction и IBOutlets используются для соединения вашего интерфейса, созданного в Интерфейсном Разработчике, с вашим контроллером. Если вы не используете Interface Builder и полностью не строите свой интерфейс в коде, вы можете создать программу, не используя их. Но на самом деле большинство из нас использует Interface Builder, когда вы хотите, чтобы в вашем интерфейсе появилась некоторая интерактивность, вам придется использовать IBActions и IBoutlets.

1 голос
/ 17 января 2019

IBOutlet

  • Это свойство .
  • Когда загружается nib-файл (IB), он становится частью инкапсулированных данных, которые подключаются к переменной экземпляра.
  • Каждое соединение разархивировано и восстановлено.

IBAction

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

@ - Динамический паттерн IB - Интерфейсный Разработчик

1 голос
/ 03 февраля 2015

Когда вы используете Interface Builder, вы можете использовать Connections Inspector для настройки событий с помощью обработчиков событий. Предполагается, что обработчиками событий являются функции, имеющие модификатор IBAction. Представление может быть связано со ссылкой для того же типа и с модификатором IBOutlet.

...