![Page 1: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/1.jpg)
Построение интерфейсовViews, controllers
Разработка под iOS
Лекция 2
Глеб Тарасов
![Page 2: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/2.jpg)
Вспомним прошлое занятие
![Page 3: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/3.jpg)
Что значит минус перед определением метода?
- (void)deleteProfile;
![Page 4: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/4.jpg)
Что значит минус перед определением метода?
Экземплярный метод
- (void)deleteProfile;
![Page 5: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/5.jpg)
Из чего состоит свойство?@property(nonatomic) NSInteger age;
![Page 6: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/6.jpg)
Из чего состоит свойство?
getter, setter, внутренняя переменная
@property(nonatomic) NSInteger age;
![Page 7: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/7.jpg)
Как создать объект?
User *user = ...
![Page 8: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/8.jpg)
Как создать объект?
User *user = [[User alloc] init];
User *user = ...
![Page 9: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/9.jpg)
Какой базовый класс для всех объектов в Objective-C?
![Page 10: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/10.jpg)
Какой базовый класс для всех объектов в Objective-C?
NSObject
![Page 11: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/11.jpg)
Как вызвать метод у объекта user с параметрами «topic», «text»
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;
![Page 12: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/12.jpg)
Как вызвать метод у объекта user с параметрами «topic», «text»
[user postCommentWithTopic:@"topic" andText:@"text"];
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;
![Page 13: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/13.jpg)
View
![Page 14: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/15.jpg)
Иерархия UIView
![Page 16: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/16.jpg)
Стандартные контролы
![Page 17: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/17.jpg)
Controller
![Page 18: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/19.jpg)
Interface Builder(демонстрация)
![Page 20: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/20.jpg)
События
![Page 21: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/21.jpg)
target, action- (void)viewDidLoad{ [super viewDidLoad];
[self.button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];}
- (void)buttonClicked{ NSLog(@"buttonClicked");}
![Page 22: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/23.jpg)
Отрывок 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](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/25.jpg)
MVC
Controller
ModelView
![Page 26: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/26.jpg)
MVC
Controller
ModelView
outlets
![Page 27: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/27.jpg)
MVC
Controller
ModelView
outlets
![Page 28: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/28.jpg)
MVC
Controller
ModelView
delegates
outlets
![Page 29: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/29.jpg)
MVC
Controller
ModelView
delegates
outletstarget,action
![Page 30: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/30.jpg)
MVC
Controller
ModelView
delegates
outletstarget,action
![Page 31: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/31.jpg)
MVC
Controller
ModelView
delegates
outletsnotificationstarget,action
![Page 32: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/32.jpg)
Демонстрация
• UIView
• UIViewController
• UIButton
• UILabel
• UIImageView
![Page 33: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/33.jpg)
Что мы сегодня узнали?
![Page 34: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/34.jpg)
Какой класс базовый для всех интерфейсных элементов?
![Page 35: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/35.jpg)
Какой класс базовый для всех интерфейсных элементов?
UIView
![Page 36: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/36.jpg)
Какой класс базовый для всех контроллеров?
![Page 37: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/37.jpg)
Какой класс базовый для всех контроллеров?
UIViewController
![Page 38: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/38.jpg)
Как контроллер получает ссылку на view в Interface
Builder?
![Page 39: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/39.jpg)
Как контроллер получает ссылку на view в Interface
Builder?
через IBOutlet
![Page 40: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/40.jpg)
Как контроллер узнает об изменениях в модели?
![Page 41: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/41.jpg)
Как контроллер узнает об изменениях в модели?
через notification-ы
![Page 42: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/42.jpg)
Как view сообщает контроллеру о действиях
пользователя?
![Page 43: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/43.jpg)
Как view сообщает контроллеру о действиях
пользователя?
через target/action и delegate
![Page 44: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/44.jpg)
Темы для подготовкиНаписать приложение-демонстрацию
UIWebView(например, простой
браузер: адресная строка,
кнопки назад/вперед)
![Page 45: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/45.jpg)
Темы для подготовкиНаписать приложение-демонстрацию
UIScrollView
(например, прокрутка нескольких картинок с пагинацией и без)
![Page 46: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/46.jpg)
Темы для подготовкиНаписать приложение-демонстрацию
MKMapView
(например, карта с корпусами МГУ)
![Page 47: Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS](https://reader033.vdocuments.site/reader033/viewer/2022052310/5480519db37959442b8b5b82/html5/thumbnails/47.jpg)
Темы для подготовкиНаписать приложение-демонстрацию
UITableView(например, вывести список строк из файла в таблицу)