Программирование iPhone 5
(с) Никита Культин (Nikita Kultin), 2013.
Первый проект
Начало работы
1. Запустить Xcode 5.0.1
2. В меню File выбрать команду New>Project и в появившемся окне выбрать Single View Application
3. В окне Chooce options for your new project задать название продукта (например, Converter), имя организации-разработчика (например, Nikita Kultin), идентификатор компании (например, NkSoft) и префикс класса (например, sva). Нажать кнопку Next.
4. В следующем окне выбрать место, где будет создана папка проекта, и нажать кнопку Create.
Интерфейс
Каждому окну приложения соответствует экран (storyboard) и контроллер (ViewController). Экран обеспечивает отображение информации и взаимодействие с пользователем (на нем находятся поля отображения информации, поля редактирования, списки, кнопки и т.д.), контроллер - функциональность.
1. В окне Project Navigator выбрать Main.Storyboard
2. В нижней части правой области главного окна щелчком на соответствующей кнопке (значке) открыть вкладку библиотеки объектов (Object Library)
3. Перетащить на storyboard (страницу) нужные объекты (например, Label, Button, Text field)
4. Настроить вид объектов (выбрать объект и в окне Attribute Inspector установить значения атрибутов)
Функциональность
1. В окне Project Navigator выбрать svaViewController.h (здесь sva - префикс класса, указанный в начале работы над проектом)
2. Поместить в файл svaViewController.h объявления объектов интерфейса. Например, если на главной странице есть два поля отображения текста (Label), поле ввода-редактирования (Text Field) и кнопка (Button), то раздел интерфейса будет таким:
@interface svaViewController : UIViewController
{
UITextField *textField1; // поле редактирования
UILabel *label1; // поле отображения текста
UILabel *label2;
UIButton *button1; // кнопка
}
@end
3. Поместить в раздел интерфейса объявления свойств, соответствующих объектам интерфейса:
@interface svaViewController : UIViewController
{
UITextField *textField1; // поле редактирования
UILabel *label1; // поле отображения текста
UILabel *label2;
UIButton *button1; // кнопка
}
// свойства. Свойства обеспечивают доступ к объектам
@property (nonatomic, retain) IBOutlet UITextField *textField1;
@property (nonatomic, retain) IBOutlet UILabel *label1;
@property (nonatomic, retain) IBOutlet UILabel *label2;
@property (nonatomic, retain) IBOutlet UIButton *button1;
@end
4. Поместить в раздел интерфейса объявления функций обработки событий на компонентах интерфейса, например, события Touch Down на кнопке:
@interface svaViewController : UIViewController
{
UITextField *textField1; // поле редактирования
UILabel *label1; // поле отображения текста
UILabel *label2;
UIButton *button1; // кнопка
}
// свойства. Свойства обеспечивают доступ к объектам
@property (nonatomic, retain) IBOutlet UITextField *textField1;
@property (nonatomic, retain) IBOutlet UILabel *label1;
@property (nonatomic, retain) IBOutlet UILabel *label2;
@property (nonatomic, retain) IBOutlet UIButton *button1;
// объявление функций обработки событий:
// нажатие кнопки
-(IBAction) button1TouchDown: (id) sender;
@end
5. В секцию @implementation файла svaViewController.m (здесь sva - префикс класса, указанный в начале работы над проектом) поместить директивы @synhtesize, обеспечивающие генерацию свойств, объявленных в .h-файле:
// Директива @synthesise информирует среду разработки о необходимости создать функции, обеспечивающие
// досту к объектам textField1 и label1
//
@synthesize textField1;
@synthesize label1;
@synthesize label2;
@synthesize button1;
6. В секцию @implementation файла svaViewController.m (здесь sva - префикс класса, указанный в начале работы над проектом) поместить функцию обработки события Touch Down на кнопке:
// обработка события TouchDown на button1
-(IBAction) button1TouchDown: (id) sender
{
NSString *st = [[NSString alloc] initWithFormat: @"Hello, %@!", textField1.text];
label1.text = st;
}
Не трудно догадаться, в результате щелчка на кнопке в поле label1 должно появиться приветствие.
7. В функцию обработки события Did Load окна (эту функцию создает среда разработки) поместить инструкции, выполняющие настройку формы (в рассматриваемом примере - приветствие в label1 и отображение текущей даты в поле label2):
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// настройка формы
label1.text = @"Benvenuto!"; .
NSDate *td =[NSDate date]; // получить текущую дату и время
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// задать формат отображения
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; // не отображать время
NSString *stDate = [dateFormatter stringFromDate: td];
NSString *s2 = [@"Today: " stringByAppendingString: stDate];
label2.text = s2;
}
Связывание объектов контролера с объектами storyboard
Каждый объект интерфеса, находящийся на storyboard, надо связать с соответствующим ему элементом контролера. Процесс связывания рассмотрим на примере label1.
1. В окне Project Navigator выбрать Main.storyboard
2. Сделать щелчок правой кнопкой мыши на компоненте label1
3. В появившемся окне, в списке Referencing Outlets установить указатель мыши на точку, находящуюся в конце строки New Referencing Outlet, нажать левую кнопку мыши и, удерживая кнопку нажатой, перетащить указатель на изображение контроллера (View Controller - желтый значек под изображением формы).
4. Отпустить кнопку мыши и в появившемся списке выбрать объект контроллера - label1.
Аналогично надо связать второй компонент отображения текста с label2, кнопку - с button1, поле редактирования - с textField1.
Обработка события
Чтобы связать событие нажатия кнопки (Touch Down) с функцией button1TouchDown, объявленной в контроллере, надо:
1. Сделать щелчок правой кнопкой мыши на компоненте button1.
3. В появившемся окне, в списке Sent Events установить указатель мыши на точку, находящуюся в конце строки Touch Down, нажать левую кнопку мыши и, удерживая кнопку нажатой, перетащить указатель на изображение контроллера (View Controller - желтый значек под изображением формы).
4. Отпустить кнопку мыши и в появившемся списке выбрать button1TouchDown.
Запуск
Теперь приложение можно запустить на симуляторе. Если что-то не работает, например не отображается дата в поле label1 или программа не реагирует на нажатие кнопки, надо проверить, что компоненты storyboard правильно связаны с объектами контроллера (View Controller).