В моей предыдущей статье мы узнали о некоторых основных концепциях разработки приложений для iOS. В этом уроке мы попытаемся понять шаблон дизайна iOS и некоторые основные понятия.
Шаблон дизайна
Приложения для iOS следуют шаблону проектирования MVC .
- Модель: представляет бизнес-логику вашего приложения
- Вид: представляет то, что пользователь видит в устройстве
- Контроллер: действует как посредник между моделью и представлением. Между представлением и моделью не должно быть прямого разговора. Контроллер обновляет представление на основе любых изменений в базовой модели. Если пользователь вводит или обновляет какую-либо информацию в представлении, эти изменения отражаются в модели с помощью контроллера.
У нас не будет единого контроллера для управления всеми моделями и представлениями, поскольку это усложняет приложение. Таким образом, в приложении будет несколько MVC, которые будут взаимодействовать друг с другом и решать задачи приложения.
Как представление или модель взаимодействуют с контроллером?
Представления могут взаимодействовать с контроллером с помощью целей или делегатов .
Всякий раз, когда пользователь взаимодействует с представлением, например, касаясь кнопки, представление может установить связанный с ним контроллер в качестве цели действия пользователя. Таким образом, Контролер может принять решение о дальнейших действиях. Мы увидим, как этого можно добиться в следующей части этого урока.
Представления также могут делегировать некоторые действия контроллеру, установив контроллер в качестве его делегата.
Например, в случае текстового поля решение о том, что должно произойти, когда пользователь начинает вводить текстовое поле или когда пользователь закончил вводить текстовое поле, может быть оставлено контроллеру. Это может быть достигнуто путем установки контроллера в качестве делегата текстового поля.
Мы также можем заставить контроллеры прослушивать изменения в базовой модели. Модель может затем передать изменения всем прослушивающим контроллерам через уведомления .
Основы развития
Мы приведем в движение колеса, исследуя основные строительные блоки программирования iOS — файлы интерфейса и реализации.
Интерфейсный файл
Файл интерфейса или заголовка содержит объявления всех открытых переменных и методов экземпляра.
Образец:
#import <Foundation/Foundation.h> @interface Sample:NSObject //variable and method declaration goes here @property (nonatomic,strong) NSString *strName; -(void) printToConsole:(NSString *) strLog; @end
Примечания к сведению:
- Файл начинается с ключевого слова
@interface
за которым следует имя классаSample
. -
NSObject
обозначает суперкласс классаSample
.NSObject
является базовым классом для всех классов Objective C. - Определенный класс и его суперкласс разделены двоеточием, обозначающим концепцию наследования. Помните, что в Objective C. нет множественного наследования
- Оператор
#import
указывает библиотеки, которые должны быть включены. Фреймворк Foundation содержит классы и функции для разработки под iOS и OSX.NSObject
,NSString
,NSArray
иNSDictionary
являются частью структуры Foundation. - Когда мы определяем класс View или View Controller, мы импортируем инфраструктуру UIKIT, которая содержит классы и функции, необходимые для разработки под iOS. Эти классы будут подклассом
UIView
илиUIViewController
доступным в структуре UIKIT. У нас есть похожая платформа под названием Appkit Framework для разработки приложений на Mac. -
@property
объявляет методы получения и установки переменнойstrName
. Реальные методы получения и установки не видны в коде, но все это происходит за сценой. Мы можем переопределить методы getter и setter, если это требуется в файле реализации. -
nonatomic,strong
обозначает атрибуты свойств, по которым генерируются методы getter и setter. Это влияет на способ управления памятью объекта. Мы увидим это подробно в моих будущих уроках. -
- (void) printToConsole:(NSString *) strLog;
обозначает объявление метода.-
-
указывает, что это метод экземпляра.+
будет обозначать статический метод. -
void
— это тип возвращаемого значения. -
printToConsole
— это имя функции. -
strLog
является аргументом. Аргументы появляются обычно после двоеточия. - Общий синтаксис:
-
(Return Type) methodName:(arg1 Type)arg1:(arg2 Type)arg2;
-
(Return type) methodName:(arg1 Type)arg1 methodName:(arg2 Type)arg2
-
-
Файл реализации
Образец:
@interface Sample() //Private variables and methods declared here @end @implementation Sample @synthesize strName //Method Definitions - (void) printToConsole:(NSStsring *) strLog { NSLog(@”Understanding the basics is important”) NSLog(@”Logs ”+ strLog) } @end
Примечания к сведению:
- Все
Private
методы и переменные могут быть объявлены в разделе интерфейса в файле реализации. - Начинается с ключевого слова
@implementation
. -
@synthesize
представляет определения@synthesize
установки переменной. - Методы, объявленные в файле
.h
, реализованы в файле.m
. В нашем примереprintToConsole
методаprintToConsole
осуществляется в этом файле. ФункцияNSLog
помогает в печати журналов на консоль. Строковые значения всегда начинаются с символа@
.NSLog
может быть полезен для отладки вашего приложения. - Оба файла
.h
и.m
должны заканчиваться ключевым словом@end
.
Создать образец приложения
Теперь давайте создадим простое приложение, чтобы узнать, как происходит взаимодействие между представлением и его контроллером.
Итак, создайте приложение Single View, как я объяснил в моей предыдущей статье .
Нажмите на TTTViewcontroller.xib
и выберите владельца файла, а затем выберите инспектора идентификации. Класс, упомянутый здесь, отвечает за все действия, которые происходят внутри этого Представления.
Перетащите кнопку из библиотеки объектов и поместите ее в представление.
Измените заголовок кнопки на Click me .
Мы можем создать ссылку на эту кнопку в TTTViewController. В терминах iOS мы называем это выходом . Переменная IBOutlet
в контроллере представляет некоторый элемент пользовательского интерфейса в Интерфейсном Разработчике.
Чтобы создать розетку, выберите Assistant Editor на панели инструментов. Поместите ваш TTTViewController.Xib
с одной стороны и TTTViewController.h
с другой стороны.
Теперь щелкните правой кнопкой мыши на кнопке и в раскрывающемся .h
выберите « Новый источник ссылок» и перетащите его в файл .h
как показано ниже.
Дайте переменной имя во всплывающем окне и выберите «Подключиться».
Теперь в вашем файле интерфейса будет автоматически сгенерирована переменная IBOutlet
как показано ниже.
#import <UIKit/UIKit.h> @interface TTTViewController : UIViewController @property (weak, nonatomic) IBOutlet UIButton *btnClickMe; @end
Мы также можем указать действие, которое должно быть вызвано нажатием кнопки.
Щелкните правой кнопкой мыши на кнопке, выберите кружок и перетащите соединение из события Touch Up Inside кнопки в файл контроллера, как показано ниже.
Введите имя метода и выберите « Подключиться» .
Теперь ваш интерфейсный файл изменится, как показано ниже.
@interface TTTViewController : UIViewController @property (weak, nonatomic) IBOutlet UIButton *btnClickMe;- (IBAction)btnClickAction:(id)sender; @end
Примечания к сведению:
-
IBAction
означает, что этот метод будет вызываться для некоторых действий в представлении. -
IBAction
обозначает пустое возвращаемое значение. - Аргумент
sender
в методе обозначает ссылку на нажатую кнопку. -
id
— это общий тип данных для всех классов Objective C. - Пустое определение метода также будет автоматически сгенерировано в файле реализации.
- Таким образом, представление взаимодействует с контроллером, устанавливая целевое действие, которое должно вызываться в контроллере, когда пользователь взаимодействует с представлением.
Мы определим метод в файле реализации, как указано ниже.
- (IBAction)btnClickAction:(id)sender { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Hi" message:@"Button clicked!!!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; }
Обратите внимание, как создается представление оповещения. Выберите alt и нажмите на UIAlertview
чтобы получить больше информации о просмотре предупреждений.
Запустите приложение в симуляторе.
Вывод
К концу этой статьи вы должны понимать, как XCode значительно упростил программирование.
Мы рассмотрим некоторые более интересные концепции в моих будущих статьях.