Первое приложение под OS X

Начало

Для начала, если у Вас еще не установлено приложение Xcode, то Вам следует его установить из App Store. На момент написания данного раздела актуальной версией Xcode была 5.0, версией OS X - 10.9.

Если Xcode установлено, то начнем с его запуска.

Выберите в меню Xcode: File > New > Project...

В появившемся диалоге выберите OS X Application, Cocoa Application и нажмите Next.

Далее введите наименование Вашего первого приложения, пусть оно будет First app, и, что очень полезно, введите префикс для Ваших классов, который будет автоматически генерироваться при создании новых классов системой Xcode. Префикс должен быть уникальным, чтобы избежать конфликта пространства имен. Большинство классов Cocoa имеют префикс NS, пусть в нашем первом приложении будет префикс mb.

Далее выведится диалог, в котором необходимо выбрать место для сохранения проекта на диске.

Итак, Xcode создало начальный макет нашего первого OS X Cocoa приложения, в инспекторе файлов проекта мы увидим следующее дерево файлов:

 
  • mbAppDelegate.h - заголовочный файл делегата приложения.
  • mbAppDelegate.m - файл реализации делегата приложения.
  • MainMenu.xib - файл ресурсов приложения, который содержит форму главного меню и окна приложения, при компиляции компилируется в компактный nib файл.

Нажмем кнопку Run, или Cmd+R, или в меню выберем Product > Run, чтобы собрать и запустить проект.

Вы должны увидеть пустое окно с заголовком, содержащем название нашего проекта, а также в системной области меню,- меню приложения.

Закроем окно приложения, при этом само приложение будет продолжать работать и висеть в доке. Чтобы прекратить его работу необходимо выйти через меню приложения, (в нашем случае) First app > Quit First app, или комбинацией Cmd+Q.

Чтобы изменить это поведение реализуем один из методов делегата приложения, чтобы приложение завершало свою работу после закрытия последнего окна. Для этого откроем файл mbAppDelegate.m и добавим следующий метод:

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
{
  return YES;
}

Вновь запустим приложение, и закроем окно. Как видим теперь при закрытии окна приложение прекращает свою работу.

Реализация вышеприведенного метода по умолчанию возвращает NO.

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

Выберем в инспекторе файлов проекта MainMenu.xib, в инспекторе объектов выделяем объект Window, в редакторе отобразится форма нашего главного окна приложения.

В инспекторе элементов управления находим и перетаскиваем на форму окна два элемента ввода Text Field, один элемент Wrapping Label, и одну кнопку Push Button:

Расставим элементы на форме окна следующим образом:

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

{
  IBOutlet NSTextField* tfWords1;
  IBOutlet NSTextField* tfWords2;
  IBOutlet NSTextField* tfWordsResult;
}

IBOutlet - компиляторная опция Xcode, сообщающая, что переменная является указателем на объект в связанном nib файле.

Собственно после добавления вышеприведенных объявлений соединим их с элементами на форме. Для этого опять выделим MainMenu.xib и переведем редактор в режим Assistant editor.

intrface builder assistant editor

В альтернативном окне редактора выберем для отображения файл mbAppDelegate.h

mbAppDelegate.h

Напротив каждого вновь задекларированного свойства IBOutlet появится пустой кружок, нажав который необходимо протянуть связь к соответствующему элементу на форме главного окна. Как только указатель связан, кружок заполнится.

Таким образом соединяем все три указателя с соответствующим текстовым полем в окне.

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

Отпустим правую кнопку мыши и в появившемся диалоге выберем создание Action, а также введем имя обработчика события, например clickSumm. Нажимаем Connect, и наш метод обработки события нажатия кнопки создан.

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

Далее перейдем в режим редактора Standart Editor, выберем файл mbAppDelegate.m, и отредактируем вновь созданный метод:

- (IBAction)clickSumm:(id)sender {
  NSString* s = [NSString stringWithFormat:@"%@ %@",tfWords1.stringValue, tfWords2.stringValue];
  tfWordsResult.stringValue = s;
}

Данный метод объединяет две введенные, в поля ввода, строки в одну через пробел, с помощью метода форматирования строк, и полученную новую строку присваивает свойству stringValue элемента NSTextField.

Запустим приложение, введем текст в поля ввода и нажмем кнопку. Результат: объединенные через пробел строки в поле Wrapping Label.

Добавим еще две кнопки в главное окно и аналогично создадим для каждой обработчик clickUp и clickDown соответственно.

Отредактируем созданные обработчики событий нажатия кнопок в файле mbAppDelegate.m.

- (IBAction)clickUp:(id)sender {
  tfWordsResult.stringValue = [tfWordsResult.stringValue uppercaseString];
}

- (IBAction)clickDown:(id)sender {
  tfWordsResult.stringValue = [tfWordsResult.stringValue lowercaseString];
}

Первый метод приводит содержимое элемента Wrapping Label к верхнему регистру, второй к нижнему.

Запустим приложение и проверим, что все работает.

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac