Какова цель использования IBOutlets и IBActions в Xcode и Interface Builder?
Имеет ли какое-то значение, если я не использую IBOutlets и IBActions?
Swift:
@IBOutlet weak var textField: UITextField!
@IBAction func buttonPressed(_ sender: Any) { /* ... */ }
Objective-C:
@property (nonatomic, weak) IBOutlet UITextField *textField;
- (IBAction)buttonPressed:(id)sender { /* ... */ }
Ответы:
IBAction
иIBOutlet
макросы, определенные для обозначения переменных и методов, на которые можно ссылаться в Интерфейсном Разработчике.IBAction
разрешаетvoid
иIBOutlet
ничего не решает, но для Xcode и Interface Builder они означают, что эти переменные и методы могут быть использованы в Interface Builder для связи элементов UI с вашим кодом.Если вы вообще не собираетесь использовать Interface Builder, тогда они вам не нужны в вашем коде, но если вы собираетесь его использовать, вам нужно указать
IBAction
методы, которые будут использоваться в IB, иIBOutlet
объекты это будет использоваться в IB.источник
IBOutlet
не разрешаетсяid
. Учтите это:IBOutlet UILabel *nameLabel;
- еслиIBOutlet
разрешитьid
, то этот код будет читать,id UIlabel *namelabel;
что приводит к ошибке компилятора. Как я изначально говорил,IBOutlet
ничего не решается.Традиционный способ пометить метод, чтобы он появился в Интерфейсном Разработчике, и вы можете перетащить соединение с ним, состоял в том, чтобы заставить метод возвращать тип IBAction. Однако, если вместо этого вы сделаете ваш метод недействительным (IBAction равен # define'd быть пустым) и предоставите аргумент (id), метод все равно будет виден. Это обеспечивает дополнительную гибкость, все
Все 3 из них видны из Интерфейсного Разработчика:
См. Руководство пользователя Интерфейсного Разработчика Apple для деталей, особенно раздел, озаглавленный Интеграция XCode.
источник
Вам необходимо использовать IBOutlet и IBAction, если вы используете конструктор интерфейса (отсюда префикс IB) для компонентов GUI. IBOutlet необходим для связи свойств вашего приложения с компонентами в IB, а IBAction используется для того, чтобы ваши методы могли быть связаны с действиями в IB.
Например, предположим, что вы определяете кнопку и метку в IB. Чтобы динамически изменить значение метки, нажав кнопку, вы определите действие и свойство в своем приложении, например:
Затем в IB вы должны связать myLabel с меткой и подключить метод pushme с помощью кнопки. Вам нужны IBAction и IBOutlet, чтобы эти соединения существовали в IB.
источник
(void)
метод в Интерфейсном Разработчике.Интерфейсный Разработчик использует их, чтобы определить, какие элементы и сообщения могут быть «подключены» к элементам управления интерфейса, которые вы используете в своем окне / представлении.
IBOutlet и IBAction присутствуют исключительно как маркеры, которые Интерфейсный Разработчик ищет, когда он анализирует ваш код во время разработки, они не оказывают никакого влияния на код, сгенерированный компилятором.
источник
Заработал на схеме, глядя на кодирование значения ключа, подумал, что это может кому-то помочь. Это помогает понять, что такое IBOutlet.
Глядя на поток, можно увидеть, что IBOutlets существуют только для того, чтобы сопоставить имя свойства с именем элемента управления в файле Nib.
источник
Outlet - это ссылка из кода на пользовательский интерфейс. Если вы хотите показать или скрыть элемент пользовательского интерфейса, если вы хотите получить текст текстового поля или включить или отключить элемент (или сотню других вещей), вы должны определить выход этого объекта в источниках и связать этот выход через «объект интерфейса» к элементу пользовательского интерфейса. После этого вы можете использовать выход, как и любую другую переменную в вашем коде.
IBAction - специальный метод, запускаемый объектами пользовательского интерфейса. Интерфейсный Разработчик распознает их.
Для получения дополнительной информации, пожалуйста, обратитесь Apple Docs
источник
IBAction и IBOutlets используются для соединения вашего интерфейса, созданного в Интерфейсном Разработчике, с вашим контроллером. Если вы не используете Interface Builder и полностью не строите свой интерфейс в коде, вы можете создать программу, не используя их. Но на самом деле большинство из нас использует Interface Builder, и если вы хотите, чтобы в вашем интерфейсе появилась некоторая интерактивность, вам придется использовать IBActions и IBoutlets.
источник
IBOutlet
IBAction
@ - Динамический шаблон IB - Интерфейсный Разработчик
источник
Один из главных комментариев по этому Вопросу специально спрашивает:
На этот вопрос хорошо ответил NSHipster:
IBAction
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#ibaction
IBOutlet:
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#iboutlet
источник
когда вы используете Interface Builder, вы можете использовать Connections Inspector для настройки событий с помощью обработчиков событий, предполагается, что обработчиками событий являются функции, имеющие модификатор IBAction. Представление может быть связано со ссылкой для того же типа и с модификатором IBOutlet.
источник