62
MVC,View, Controllers Разработка приложений для iOS Лекция 2 Глеб Тарасов

Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

  • Upload
    -

  • View
    2.054

  • Download
    1

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

MVC, View, Controllers

Разработка приложений для iOS

Лекция 2

Глеб Тарасов

Page 3: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Вспомним прошлое занятие

Page 4: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой метод управления памятью используется в языке Си?

Page 5: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой метод управления памятью используется в языке Си?

Ручное выделение памяти, удаление

Page 6: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой метод управления памятью используется в языке Си?

А в Objective-C?

Ручное выделение памяти, удаление

Page 7: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой метод управления памятью используется в языке Си?

А в Objective-C?

Ручное выделение памяти, удаление

Подсчет ссылок

Page 8: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Чем отличаются строки "string1" и @"string2"

Page 9: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Чем отличаются строки "string1" и @"string2"

Char* NSString*

Page 10: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как сохранить число 5 в массив?

Page 11: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как сохранить число 5 в массив?

NSNumber

Page 12: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Что такое «strong» и «weak»?

Чем они отличаются?

Page 13: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Что такое «strong» и «weak»?

Чем они отличаются?

модификаторы у свойств,strong увеличивает счетчик ссылок,

weak нет

Page 14: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Что значит минус перед определением

- (void)deleteProfile;

Page 15: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Что значит минус перед определением

Экземплярный метод

- (void)deleteProfile;

Page 16: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Из чего состоит свойство?

@property(nonatomic) NSInteger age;

Page 17: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Из чего состоит свойство?

getter, setter, внутренняя переменная

@property(nonatomic) NSInteger age;

Page 18: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как создать объект?

User *user = ...

Page 19: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как создать объект?

User *user = [[User alloc] init];

User *user = ...

Page 20: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой базовый класс для всех объектов в

Objective-C?

Page 21: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой базовый класс для всех объектов в

Objective-C?

NSObject

Page 22: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как вызвать метод у объекта user с

параметрами «topic», «text»

- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;

Page 23: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как вызвать метод у объекта user с

параметрами «topic», «text»

[user postCommentWithTopic:@"topic" andText:@"text"];

- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;

Page 24: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

MVC

Controller

ModelView

Page 25: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

View

Page 26: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

UIView@property(nonatomic) CGRect frame;@property(nonatomic) CGRect bounds;@property(nonatomic) CGPoint center;

@property(nonatomic,readonly) UIView *superview;@property(nonatomic,readonly,copy) NSArray *subviews;

- (void)removeFromSuperview;- (void)addSubview:(UIView *)view;- (void)bringSubviewToFront:(UIView *)view;- (void)sendSubviewToBack:(UIView *)view;

@property(nonatomic,copy) UIColor *backgroundColor;@property(nonatomic) CGFloat alpha;@property(nonatomic,getter=isHidden) BOOL hidden;

Page 27: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Иерархия UIView

Page 28: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Стандартные контролы

Page 29: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Controller

Page 30: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

UIViewController// The getter first invokes [self loadView] if the view hasn't been set yet. // Subclasses must call super if they override the setter or getter.@property(nonatomic,retain) UIView *view;

// This is where subclasses should create their custom view hierarchy // if they aren't using a nib. // Should never be called directly.- (void)loadView;

- (void)viewWillUnload __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);// Called after the view has been loaded. For view controllers created in code, // this is after -loadView. For view controllers unarchived from a nib, // this is after the view is set.- (void)viewDidLoad;

// Called after the view controller's view is released and set to nil. // For example, a memory warning which causes the view to be purged. // Not invoked as a result of -dealloc.- (void)viewDidUnload __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

- (BOOL)isViewLoaded __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

Page 31: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

@implementation ViewController

- (void)viewDidLoad{ [super viewDidLoad]; CGRect rect = CGRectMake(20, 20, 100, 100); UILabel *l = [[UILabel alloc] initWithFrame:rect]; l.text = @"text"; [self.view addSubview:l];}

- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; NSLog(@"появился");}

- (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; NSLog(@"пропал");}

@end

@interface ViewController : UIViewController

@end

Page 32: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Наполнение View

В коде Interface Builder

- (void)viewDidLoad{ [super viewDidLoad]; CGRect rect = CGRectMake(20, 20, 100, 100); UILabel *l = [[UILabel alloc] initWithFrame:rect]; l.text = @"text"; [self.view addSubview:l];}

Page 33: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Interface Builder(демонстрация)

Page 34: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

События

Page 35: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

target, action

- (void)viewDidLoad{ [super viewDidLoad];

[self.button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];}

- (void)buttonClicked{ NSLog(@"buttonClicked");}

Page 36: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

delegate

- (void)viewDidLoad{ [super viewDidLoad]; self.tableView.delegate = self;}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"select row");}

@interface ViewController : UIViewController<UITableViewDelegate>

Page 37: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Отрывок UIScrollViewDelegate

@protocol UIScrollViewDelegate<NSObject>

@optional

// any offset changes- (void)scrollViewDidScroll:(UIScrollView *)scrollView;

// any zoom scale changes- (void)scrollViewDidZoom:(UIScrollView *)scrollView __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2);

// called on start of dragging // (may require some time and or distance to move)- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

...

Page 38: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

notifications

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];[center postNotificationName:@"UserChanged" object:nil];

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];[center addObserver:self selector:@selector(userChanged) name:@"UserChanged" object:nil];

- (void)userChanged{ NSLog(@"Событие произошло");}

Событие случилось:

Ловим событие:

Page 39: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

MVC

Controller

ModelView

Page 40: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

MVC

Controller

ModelView

outlets

Page 41: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

MVC

Controller

ModelView

outlets

Page 42: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

MVC

Controller

ModelView

delegates

outlets

Page 43: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

MVC

Controller

ModelView

delegates

outletstarget,action

Page 44: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

MVC

Controller

ModelView

delegates

outletstarget,action

Page 45: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

MVC

Controller

ModelView

delegates

outlets

notificationstarget,action

Page 46: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Демонстрация

Page 47: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Что мы сегодня узнали?

Page 48: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой класс базовый для всех

интерфейсных элементов?

Page 49: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой класс базовый для всех

интерфейсных элементов?

UIView

Page 50: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой класс базовый для всех

контроллеров?

Page 51: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Какой класс базовый для всех

контроллеров?

UIViewController

Page 52: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как контроллер получает ссылку на view в Interface

Builder?

Page 53: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как контроллер получает ссылку на view в Interface

Builder?

через IBOutlet

Page 54: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как контроллер узнает об изменениях в модели?

Page 55: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как контроллер узнает об изменениях в модели?

через notification-ы

Page 56: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как view сообщает контроллеру о действиях пользователя?

Page 57: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Как view сообщает контроллеру о действиях пользователя?

через target/action и delegate

Page 58: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Темы для подготовкиНаписать приложение-демонстрацию

UIWebView(например, простой

браузер: адресная строка,

кнопки назад/вперед)

Page 59: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Темы для подготовкиНаписать приложение-демонстрацию

UIScrollView(например, прокрутка нескольких картинок

с пагинацией и без)

Page 60: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Темы для подготовкиНаписать приложение-демонстрацию

MKMapView

(например, карта с указанием на ваш дом)

Page 61: Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers

Темы для подготовкиНаписать приложение-демонстрацию

UITableView(например, вывести список строк из файла в таблицу)