Курсы по мобильной разработке. 2 лекция. Построение...

47
Построение интерфейсов Views, controllers Разработка под iOS Лекция 2 Глеб Тарасов

Upload: -

Post on 29-Nov-2014

1.888 views

Category:

Education


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

Построение интерфейсовViews, controllers

Разработка под iOS

Лекция 2

Глеб Тарасов

Page 2: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

Page 3: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

- (void)deleteProfile;

Page 4: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

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

- (void)deleteProfile;

Page 5: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

Из чего состоит свойство?@property(nonatomic) NSInteger age;

Page 6: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

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

@property(nonatomic) NSInteger age;

Page 7: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

User *user = ...

Page 8: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

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

User *user = ...

Page 9: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

Page 10: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

NSObject

Page 11: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

Как вызвать метод у объекта user с параметрами «topic», «text»

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

Page 12: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

Как вызвать метод у объекта user с параметрами «topic», «text»

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

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

Page 13: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

View

Page 14: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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 15: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

Иерархия UIView

Page 16: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

Page 17: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

Controller

Page 18: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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 19: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

Page 20: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

События

Page 21: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

target, action- (void)viewDidLoad{ [super viewDidLoad];

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

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

Page 22: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

delegate

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

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

@interface ViewController : UIViewController<UITableViewDelegate>

Page 23: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

Отрывок 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 24: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

notificationsNSNotificationCenter *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 25: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

MVC

Controller

ModelView

Page 26: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

MVC

Controller

ModelView

outlets

Page 27: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

MVC

Controller

ModelView

outlets

Page 28: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

MVC

Controller

ModelView

delegates

outlets

Page 29: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

MVC

Controller

ModelView

delegates

outletstarget,action

Page 30: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

MVC

Controller

ModelView

delegates

outletstarget,action

Page 31: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

MVC

Controller

ModelView

delegates

outletsnotificationstarget,action

Page 32: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

• UIView

• UIViewController

• UIButton

• UILabel

• UIImageView

Page 33: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

Page 34: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

Какой класс базовый для всех интерфейсных элементов?

Page 35: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

Какой класс базовый для всех интерфейсных элементов?

UIView

Page 36: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

Page 37: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

UIViewController

Page 38: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

Builder?

Page 39: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

Builder?

через IBOutlet

Page 40: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

Page 41: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

через notification-ы

Page 42: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

пользователя?

Page 43: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

пользователя?

через target/action и delegate

Page 44: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

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

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

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

Page 45: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

UIScrollView

(например, прокрутка нескольких картинок с пагинацией и без)

Page 46: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

MKMapView

(например, карта с корпусами МГУ)

Page 47: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS

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

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