Как я могу создать `IBOutlet` или `IBAction` в пользовательском классе

как я могу создать IBOutlet или IBAction с учетом следующих условий:

  • IBAction или IBOutlet должны быть созданы внутри моего пользовательского класса (унаследованного от NSObject)
  • экземпляр NSButton виден внутри Interface Builder (XCode 4)

Короче говоря, я хотел бы добавить действие нажатия кнопки в свой класс.

Любая помощь приветствуется, спасибо :)

РЕДАКТИРОВАНИЕ 19 февраля 2012 г.

Я задавал вопросы, не предоставляя всех необходимых данных... мне просто нужно было прочитать еще несколько руководств по какао...

Я хотел подключить действия к компонентам из других областей, что невозможно, насколько я знаю :(


person xyz    schedule 21.01.2012    source источник


Ответы (2)


Посмотрите учебную документацию Apple Cocoa, которая поставляется с Xcode 4, это довольно фундаментально для модели дизайнера Xcode/Cocoa/интерфейса!

В общих чертах:

@interface MyCustomClass

- (IBAction) myButtonClickAction:(id)sender;

@end

@implementation MyCustomClass

- (IBAction) myButtonClickAction:(id)sender
{
   NSLog(@"My button has been clicked");
}

@end

Теперь в дизайнере интерфейса (просто откройте файл .xib в Xcode, чтобы получить дизайнер) вам нужно:

  1. Добавьте экземпляр MyCustomClass — выберите Объект в Библиотеке объектов и перетащите его на свои Объекты (обычно на левой стороне холста) или на холсте дизайна. (он просто перейдет к объектам, а не создаст графический виджет на холсте). Теперь выберите добавленный Объект и в Инспекторе (обычно справа от холста) установите класс MyCustomClass. Теперь, когда ваше приложение запустится, будет создан экземпляр MyCustomClass.
  2. Выберите свой NSButton на холсте дизайна, перейдите на вкладку Подключения в Инспекторе. Нажмите и перетащите из селектора в разделе Отправленные действия на свой MyCustomClass в разделе Объекты. После выпуска вы получите меню из IBAction для выбора, выберите myButtonClickAction.
  3. Вероятно, вы захотите добавить IBOutlet к своему делегату приложения, чтобы связать его с созданным экземпляром пользовательского объекта. Если вы этого не сделаете, у вас не будет прямого доступа к нему. Процесс для этого следует той же схеме, что и для IBAction выше.

Вот так, на словах (картинки помогают), и очень кратко.

Теперь идите читать эти учебники!

person CRD    schedule 22.01.2012
comment
Я пропускал шаг 3 и не мог понять, почему объект был создан, но недоступен - спасибо! - person Jack James; 09.07.2015

IBOutlet и IBAction — это просто флаги, которые будут использоваться конструктором интерфейсов для подключения UIComponents и их действий к классам (отсюда и префикс IB). Это все, для чего они используются - вы не используете их для программного подключения кнопок к действиям.

Если вы хотите привязать кнопку к действию, вам нужно добавить и действие к кнопке.

(не уверен в синтаксисе с NSButton, так как я программист iOS, но ищите документы, и это должно быть ясно)

person bandejapaisa    schedule 21.01.2012
comment
Элементы управления в Cocoa имеют только одну цель и действие, поэтому вы просто установите кнопку action и, необязательно, ее target (без ее установки действие будет отправлено по цепочке респондента). - person Peter Hosey; 22.01.2012