Яблочный раздел сайта, или всё об Apple и Mac OS X → Создание первого приложения для iPhone (продолжение)
Начало тут
Шорткаты в Xcode
Редкий разработчик не любит пользоваться шорткатами, так что сразу изучим парочку, и, главное, поймем, где их менять.
Начинающему программисту постоянно приходится обращаться к документации, поэтому неплохо запомнить три шортката. Двойной щелчок по слову в коде с зажатой клавишей Alt откроет быструю подсказку. Если ее недостаточно, в правом верхнем углу подсказки есть иконка с книжкой. Нажмите ее, чтобы открыть полноценную документацию. Чтобы открыть документацию сразу, щелкните по интересующему вас слову два раза с зажатыми клавишами Alt+Cmd. Попробуйте эти шорткаты на слове UILabel, которое мы только что писали в HelloWorldViewController.h.
Чтобы просто открыть документацию, можно нажать Cmd+Alt+Shift+/. Чудовищно неудобно, но так уж сделано.
Чтобы переходить между заголовочным файлом класса (.h) и его телом (.m) можно использовать шорткат Cmd+Alt+вверх. Чтобы вернуться в предыдущее место, где мы что-то делали (в другом классе, или другом месте данного класса) можно нажать Cmd+Alt+влево. Опять перейти — Cmd+Alt+вправо.
Остальные шорткаты изучайте сами, для этого откройте Xcode→Preferences, там вкладку Key Bindings. Поменять шорткаты можно там же, для этого выберите в таблице нужную вам строку и дважды ткните в нее, но не в начале, а в столбце Key. В появившемся поле ввода просто нажмите нужное сочетание клавиш.
Если вы хотите удалить шорткат, опять дважды ткните в нужную строку и нажмите «минус» в правой части поля ввода.
Связываем поле с надписью
Пора вернуться к нашему приложению. Сохраните изменения в HelloWorldViewController.h (Cmd+S) и снова откройте HelloWorldViewController.xib в Interface Builder-е.
Выберите File’s Owner и нажмите Cmd+2 — откроется вторая вкладка инспектора. В ней есть раздел Outlets, а там в одной из строк слева написано «label». Справа в этой же строке — пустой кружок. Зажав левую кнопку мыши, потяните кружок к нашему label-у. Когда мышка окажется над label-ом, отпустите клавишу мыши.

Теперь наше поле типа UILabel сопоставлено с лэйблом в интерфейс билдере — справа от label в разделе Outlets написано «Label (Hello World!)». Interface Builder позволяет задать начальное состояние элемента интерфейса, а в коде мы можем дальше менять его атрибуты по своему усмотрению.
Если мы когда-нибудь захотим разорвать связь нашего поля с этим label-ом, мы ткнем в маленький крестик слева от «Label (Hello World!)». Но сейчас просто сохраним xib (Cmd+S) и вернемся в Xcode.
Меняем текст надписи
Выберите слева файл HelloWorldViewController.m и найдите закомментированный метод
Раскомментируйте его, удалив /* и */ до и после метода, и после
напишите
Данный метод выполняется после инициализации view, а вписанная нами строка меняет текст поля label, которое, как мы помним, и есть наша надпись. Запустите приложение. Если мы все сделали правильно, мы увидим следующую картину:

Как видите, все очень просто. Нам понадобилось написать всего 2 строки кода!
Добавляем кнопку
Напоследок сделаем наше приложение еще чуть сложнее. Добавим кнопку, по нажатии которой текст «Hello World!» будет меняться на «Hi again!», а кнопка будет исчезать.
Откройте класс HelloWorldViewController.h, объявите поле для кнопки:
и метод, который будет вызываться при нажатии на кнопку:
В итоге дожно получится:
Слово IBAction нуждается в комментарии. У некоторых элементов интерфейса есть стандартные события, при наступлении которых может быть вызван какой-нибудь метод (в терминах Objective-C — кому-то послано какое-нибудь сообщение). Тот, кому послано это сообщение, называется делегатом (вы обязательно столкнетесь когда-нибудь с этим термином, так что лучше сразу его запомнить), а метод, который будет вызван — действием. Ключевое слово IBAction помогает Interface Builder-у понять, что этот метод можно связать с событием какого-нибудь элемента интерфейса. Если бы с событием можно было связывать любой метод, без уточнений, то их было бы достаточно много, и в интерфейс-билдере стало бы не очень удобно работать. А так — в самый раз.
Сохраните изменения в HelloWorldViewController.h и еще раз откройте HelloWorldViewController.xib в Interface Builder-е. Откройте Library (Cmd+Shift+L), найдите там Round Rect Button и перетащите в наш view. Ткните в нее два раза и введите текст, который будет написан на кнопке: «change text».
Кнопка есть, надо только связать ее с полем, и сделать так, чтобы при нажатии на нее вызывался объявленный нами метод. Как связать с полем вы уже знаете — выберите File’s Owner, нажмите Cmd+2, и перетащите кружок справа от надписи button на кнопку. Готово!
Связь с методом происходит почти так же: выберите саму кнопку и нажмите Cmd+2. В списке events найдите Touch Up Inside. Это событие вызывается в момент поднимания пальца, которым ткнули в кнопку (именно в этот момент традиционно происходит срабатывание нажатия). Точно так же, как и раньше, тащите кружок, расположенный справа от этого события, к объекту First Responder. Появится небольшой список, в котором выберите buttonPressed. Сохраните файл.
Осталось совсем немного. Откройте HelloWorldViewController.m и, например, в конец файла (но до @end) напишите:
И, «для порядку», сотрите метод viewDidLoad. Чтобы не мусорить.
Написанный нами простой метод меняет текст надписи (это мы уже умеем) и убирает кнопку, ставшую теперь ненужной. Проверим? Запустите приложение и наслаждайтесь результатом. Как видите, все весьма просто!
Проект, который должен был у вас получиться, на всякий случай приложен к статье.
Заключение
Все, что мы делали, было очень просто и быстро, не правда ли? Но не стоит обольщаться — любое серьезное приложение требует весьма основательных вложений времени и сил, особенно для начинающих iPhone-разработчиков. К счастью, iPhone SDK — весьма современная и удобная библиотека, предоставляющая массу возможностей и удобных решений, и снабженная неплохой документацией (хотя некоторые моменты могли бы быть раскрыты поподробнее).
Шорткаты в Xcode
Редкий разработчик не любит пользоваться шорткатами, так что сразу изучим парочку, и, главное, поймем, где их менять.
Начинающему программисту постоянно приходится обращаться к документации, поэтому неплохо запомнить три шортката. Двойной щелчок по слову в коде с зажатой клавишей Alt откроет быструю подсказку. Если ее недостаточно, в правом верхнем углу подсказки есть иконка с книжкой. Нажмите ее, чтобы открыть полноценную документацию. Чтобы открыть документацию сразу, щелкните по интересующему вас слову два раза с зажатыми клавишами Alt+Cmd. Попробуйте эти шорткаты на слове UILabel, которое мы только что писали в HelloWorldViewController.h.
Чтобы просто открыть документацию, можно нажать Cmd+Alt+Shift+/. Чудовищно неудобно, но так уж сделано.
Чтобы переходить между заголовочным файлом класса (.h) и его телом (.m) можно использовать шорткат Cmd+Alt+вверх. Чтобы вернуться в предыдущее место, где мы что-то делали (в другом классе, или другом месте данного класса) можно нажать Cmd+Alt+влево. Опять перейти — Cmd+Alt+вправо.
Остальные шорткаты изучайте сами, для этого откройте Xcode→Preferences, там вкладку Key Bindings. Поменять шорткаты можно там же, для этого выберите в таблице нужную вам строку и дважды ткните в нее, но не в начале, а в столбце Key. В появившемся поле ввода просто нажмите нужное сочетание клавиш.
Если вы хотите удалить шорткат, опять дважды ткните в нужную строку и нажмите «минус» в правой части поля ввода.
Связываем поле с надписью
Пора вернуться к нашему приложению. Сохраните изменения в HelloWorldViewController.h (Cmd+S) и снова откройте HelloWorldViewController.xib в Interface Builder-е.
Выберите File’s Owner и нажмите Cmd+2 — откроется вторая вкладка инспектора. В ней есть раздел Outlets, а там в одной из строк слева написано «label». Справа в этой же строке — пустой кружок. Зажав левую кнопку мыши, потяните кружок к нашему label-у. Когда мышка окажется над label-ом, отпустите клавишу мыши.

Теперь наше поле типа UILabel сопоставлено с лэйблом в интерфейс билдере — справа от label в разделе Outlets написано «Label (Hello World!)». Interface Builder позволяет задать начальное состояние элемента интерфейса, а в коде мы можем дальше менять его атрибуты по своему усмотрению.
Если мы когда-нибудь захотим разорвать связь нашего поля с этим label-ом, мы ткнем в маленький крестик слева от «Label (Hello World!)». Но сейчас просто сохраним xib (Cmd+S) и вернемся в Xcode.
Меняем текст надписи
Выберите слева файл HelloWorldViewController.m и найдите закомментированный метод
-(void)viewDidLoad {Раскомментируйте его, удалив /* и */ до и после метода, и после
[super viewDidLoad];напишите
label.text = @"Hi again!";Данный метод выполняется после инициализации view, а вписанная нами строка меняет текст поля label, которое, как мы помним, и есть наша надпись. Запустите приложение. Если мы все сделали правильно, мы увидим следующую картину:

Как видите, все очень просто. Нам понадобилось написать всего 2 строки кода!
Добавляем кнопку
Напоследок сделаем наше приложение еще чуть сложнее. Добавим кнопку, по нажатии которой текст «Hello World!» будет меняться на «Hi again!», а кнопка будет исчезать.
Откройте класс HelloWorldViewController.h, объявите поле для кнопки:
IBOutlet UIButton *button;и метод, который будет вызываться при нажатии на кнопку:
-(IBAction)buttonPressed:(id)sender;В итоге дожно получится:
#import <UIKit/UIKit.h>
@interface HelloWorldViewController : UIViewController {
IBOutlet UILabel *label;
IBOutlet UIButton *button;
}
- (IBAction)buttonPressed:(id)sender;
@endСлово IBAction нуждается в комментарии. У некоторых элементов интерфейса есть стандартные события, при наступлении которых может быть вызван какой-нибудь метод (в терминах Objective-C — кому-то послано какое-нибудь сообщение). Тот, кому послано это сообщение, называется делегатом (вы обязательно столкнетесь когда-нибудь с этим термином, так что лучше сразу его запомнить), а метод, который будет вызван — действием. Ключевое слово IBAction помогает Interface Builder-у понять, что этот метод можно связать с событием какого-нибудь элемента интерфейса. Если бы с событием можно было связывать любой метод, без уточнений, то их было бы достаточно много, и в интерфейс-билдере стало бы не очень удобно работать. А так — в самый раз.
Сохраните изменения в HelloWorldViewController.h и еще раз откройте HelloWorldViewController.xib в Interface Builder-е. Откройте Library (Cmd+Shift+L), найдите там Round Rect Button и перетащите в наш view. Ткните в нее два раза и введите текст, который будет написан на кнопке: «change text».
Кнопка есть, надо только связать ее с полем, и сделать так, чтобы при нажатии на нее вызывался объявленный нами метод. Как связать с полем вы уже знаете — выберите File’s Owner, нажмите Cmd+2, и перетащите кружок справа от надписи button на кнопку. Готово!
Связь с методом происходит почти так же: выберите саму кнопку и нажмите Cmd+2. В списке events найдите Touch Up Inside. Это событие вызывается в момент поднимания пальца, которым ткнули в кнопку (именно в этот момент традиционно происходит срабатывание нажатия). Точно так же, как и раньше, тащите кружок, расположенный справа от этого события, к объекту First Responder. Появится небольшой список, в котором выберите buttonPressed. Сохраните файл.
Осталось совсем немного. Откройте HelloWorldViewController.m и, например, в конец файла (но до @end) напишите:
- (IBAction)buttonPressed:(id)sender {
label.text = @"Hi again!";
button.hidden = YES;
}И, «для порядку», сотрите метод viewDidLoad. Чтобы не мусорить.
Написанный нами простой метод меняет текст надписи (это мы уже умеем) и убирает кнопку, ставшую теперь ненужной. Проверим? Запустите приложение и наслаждайтесь результатом. Как видите, все весьма просто!
Проект, который должен был у вас получиться, на всякий случай приложен к статье.
Заключение
Все, что мы делали, было очень просто и быстро, не правда ли? Но не стоит обольщаться — любое серьезное приложение требует весьма основательных вложений времени и сил, особенно для начинающих iPhone-разработчиков. К счастью, iPhone SDK — весьма современная и удобная библиотека, предоставляющая массу возможностей и удобных решений, и снабженная неплохой документацией (хотя некоторые моменты могли бы быть раскрыты поподробнее).
- +1
- jack291
- 15 марта 2011, 16:49

Комментарии (0)
RSS свернуть / развернутькомментировать