msumobi2. Лекция 2
TRANSCRIPT
![Page 1: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/1.jpg)
Ещё немного Objective-С. Введение в iOS.
Разработка приложений для iOS
Лекция 2
Глеб Тарасов#msumobi2
![Page 2: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/2.jpg)
Вспоминаем
![Page 3: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/3.jpg)
Как вызвать метод startProcess без параметров у объекта в переменной «queue»?
![Page 4: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/4.jpg)
Как вызвать метод startProcess без параметров у объекта в переменной «queue»?
[queue startProcess];
![Page 5: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/5.jpg)
Как вызвать метод startProcessWithTimeout с
параметром 10?
![Page 6: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/6.jpg)
Как вызвать метод startProcessWithTimeout с
параметром 10?
[queue startProcessWithTimeout:10];
![Page 7: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/7.jpg)
Как вызвать метод startProcessWithTimeout
andSize с параметрами 10 и 100?
![Page 8: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/8.jpg)
Как вызвать метод startProcessWithTimeout
andSize с параметрами 10 и 100?
[queue startProcessWithTimeout:10 andSize:100];
![Page 9: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/9.jpg)
Продолжение Objective-С
![Page 10: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/10.jpg)
ЧислаCGFloat a = 0.5;NSInteger b = -1;NSUInteger q = 10;
![Page 11: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/11.jpg)
ЧислаCGFloat a = 0.5;NSInteger b = -1;NSUInteger q = 10;
![Page 12: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/12.jpg)
ЧислаCGFloat a = 0.5;NSInteger b = -1;NSUInteger q = 10;
![Page 13: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/13.jpg)
СтруктурыCGPoint p;p.x = 10;p.y = 20;p = CGPointMake(10, 20);
CGSize s;s.width = 100;s.height = 100;s = CGSizeMake(100, 100);
CGRect r;r.size = s;r.origin = p;r = CGRectMake(10, 20, 100, 100);
![Page 14: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/14.jpg)
Стандартные классы
![Page 15: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/15.jpg)
Строки
NSString NSMutableString
NSString *a = @"abc";NSString *b = [a stringByReplacingOccurrencesOfString:@"a" withString:@"b"];NSLog(@"b: %@", b);
NSMutableString *m = [b mutableCopy];NSRange r;r.length = m.length;r.location = 0;[m replaceOccurrencesOfString:@"c" withString:@"b" options:0 range:r];NSLog(@"m: %@", m);
![Page 16: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/16.jpg)
Списки
NSArray NSMutableArray
NSArray *a = @[@"a", @"b", @"c"];NSString *first = a[0];NSString *last = a[[a count] - 1];
NSMutableArray *b = [a mutableCopy];[b addObject:@"r"];[b replaceObjectAtIndex:1 withObject:@"q"];[b removeObjectAtIndex:2];
Обычные упорядоченные массивы
![Page 17: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/17.jpg)
Словари
NSDictionary NSMutableDictionary
NSDictionary *dict = @ { @"key1" : @"a", @"key2" : @"b" };NSString *first = dict[@"key1"];
NSMutableDictionary *m = [dict mutableCopy];m[@"key3"] = @"c";
Хранение пар «ключ-значение».Быстрый поиск значения по ключу
![Page 18: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/18.jpg)
Перечисление (enumeration)
NSArray *arr = @[@"a", @"b", @"c"];
for (NSString *a in arr) { NSLog(@"%@", a);}
NSDictionary *dict = @{ @"key1" : @"a", @"key2" : @"b" };
for (NSString *key in dict){ NSString *value = dict[key]; NSLog(@"%@ - %@", key, value);}
![Page 19: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/19.jpg)
ЧислаNSNumber
NSNumber *a = @(3);int b = [a intValue];
NSNumber *c = @(2.5f);float d = [c floatValue];
NSNumber *e = @(3.567);double f = [e doubleValue];
if ([a isEqualToNumber:c]) NSLog(@"equals");
![Page 20: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/20.jpg)
Бинарные данные
NSData NSMutableData
NSData *data = [[NSData alloc] initWithContentsOfFile:@"data.txt"];NSInteger length = [data length];[data writeToFile:@"result.txt" atomically:YES]; NSMutableData *m = [data mutableCopy];[m appendData:data];
Хранение картинок, текстовых данных в бинарном виде и т.д.
![Page 21: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/21.jpg)
NSNull
NSMutableArray *a = [[NSMutableArray alloc] init];[a addObject:[NSNull null]];
NSObject *q = [a lastObject];if (q == [NSNull null]){ //bla bla}
сохранять «пусто» в массивы и словари
![Page 22: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/22.jpg)
NSValue
CGPoint p = CGPointMake(10, 20);CGRect r = CGRectMake(10, 20, 30, 40);NSValue *v1 = [NSValue valueWithCGPoint:p];NSValue *v2 = [NSValue valueWithCGRect:r];
NSArray *arr = [NSArray arrayWithObjects:v1, v2, nil];CGRect r2 = [[arr lastObject] CGRectValue];
преобразовывать структуры и другие «не объекты» в объекты
![Page 23: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/23.jpg)
Dot notation
Rectangle *r = [[Rectangle alloc] init];
[r setWidth:10];
CGFloat w = [r width];
![Page 24: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/24.jpg)
Dot notation
Rectangle *r = [[Rectangle alloc] init];
[r setWidth:10];
CGFloat w = [r width];
Rectangle *r = [[Rectangle alloc] init];
r.width = 10;
CGFloat w2 = r.width;
![Page 25: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/25.jpg)
Dot notationКласс Rectangle
- float width (число)- float height (число)- Location location (структура)
Rectangle *r = [[Rectangle alloc] init];[r setWidth:10];[r setHeight:20];
Location l;l.x = 1;l.y = 2;
[r setLocation:l];
NSLog(@"%g, %g, (%g, %g)", [r width], [r height], [r location].x, [r location].y);
![Page 26: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/26.jpg)
Dot notation
Rectangle *r = [[Rectangle alloc] init];r.width = 10;r.height = 20;Location l = {1, 2};r.location = l;
NSLog(@"%g, %g, (%g, %g)", r.width, r.height, r.location.x, r.location.y);
![Page 27: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/27.jpg)
Классы
![Page 28: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/28.jpg)
User.h
![Page 29: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/29.jpg)
User.h@interface User
@end
![Page 30: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/30.jpg)
User.h@interface User
@end
: NSObject
![Page 31: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/31.jpg)
User.h@interface User
@end
#import <Foundation/Foundation.h>
: NSObject
![Page 32: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/32.jpg)
User.h@interface User
@end
#import <Foundation/Foundation.h>
- (void)deleteProfile;
: NSObject
![Page 33: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/33.jpg)
User.h@interface User
@end
- (void)postCommentWithText:(NSString *)text;
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;
#import <Foundation/Foundation.h>
- (void)deleteProfile;
: NSObject
![Page 34: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/34.jpg)
User.h@interface User
@end
- (void)postCommentWithText:(NSString *)text;
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;
#import <Foundation/Foundation.h>
@property(nonatomic, strong) NSString *name;
@property(nonatomic) NSInteger age;
- (void)deleteProfile;
: NSObject
![Page 35: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/35.jpg)
User.h@interface User
@end
- (void)postCommentWithText:(NSString *)text;
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;
#import <Foundation/Foundation.h>
@property(nonatomic, strong) NSString *name;
@property(nonatomic) NSInteger age;
- (void)deleteProfile;
- (void)setAge:(NSInteger)age;- (NSInteger)age;
: NSObject
![Page 36: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/36.jpg)
User.m
![Page 37: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/37.jpg)
User.m#import "User.h"
@implementation User
@end
![Page 38: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/38.jpg)
User.m#import "User.h"
@implementation User
@end
- (void)setAge:(NSInteger)age{ _age = age; NSLog(@"Установили возраст %d", age);}
![Page 39: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/39.jpg)
User.m#import "User.h"
@implementation User
@end
- (void)deleteProfile{ // удаляем из базы NSString *name = [self name]; NSLog(@"Пользователь %@ удален", name);}
- (void)postCommentWithText:(NSString *)text{ [self postCommentWithTopic:@"" andText:text];}
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text{ NSLog(@"Пользователь %@ (возраст: %d) с темой %@", self.name, self.age, topic);}
- (void)setAge:(NSInteger)age{ _age = age; NSLog(@"Установили возраст %d", age);}
![Page 40: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/40.jpg)
Admin.h
![Page 41: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/41.jpg)
Admin.h#import "User.h"
@interface Admin : User
- (void)deleteComment:(NSInteger)key;
@end
![Page 42: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/42.jpg)
Admin.h#import "User.h"
@interface Admin : User
- (void)deleteComment:(NSInteger)key;
@end
Admin.m
![Page 43: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/43.jpg)
Admin.h#import "User.h"
@interface Admin : User
- (void)deleteComment:(NSInteger)key;
@end
Admin.m#import "Admin.h"
@implementation Admin
- (void)deleteComment:(NSInteger)key{ //удаляем из базы NSLog(@"Комментарий с ключом %d удален", key); // оставляем комментарий, об удалении [self postCommentWithTopic:@"От админа" andText:@"Удалил коммент за хамство"];}
@end
![Page 44: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/44.jpg)
Инициализация объектов
![Page 45: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/45.jpg)
Инициализация объектов
User *user = [[User alloc] init];
![Page 46: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/46.jpg)
Инициализация объектов
User *user = [[User alloc] init];
user.age = 34;[user setName:@"Вася Пупкин"];
![Page 47: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/47.jpg)
Инициализация объектов
NSString *comment = @"Вот такой вот комментарий";
[user postCommentWithText:comment]; [user deleteProfile];
User *user2 = [[User alloc] initWithName:@"Вася Пупкин"];
User *user = [[User alloc] init];
user.age = 34;[user setName:@"Вася Пупкин"];
![Page 48: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/48.jpg)
Собственный инициализатор
![Page 49: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/49.jpg)
Собственный инициализатор
- (id)initWithName:(NSString *)name{ self = [super init]; if (self) { self.name = name; } return self;}
![Page 50: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/50.jpg)
Собственный инициализатор
- (id)initWithName:(NSString *)name{ self = [super init]; if (self) { self.name = name; } return self;}
- (id)init{ return [self initWithName:@"Имя по умолчанию"];}
![Page 51: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/51.jpg)
Методы класса
![Page 52: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/52.jpg)
Методы классаВ файле Admin.h:
![Page 53: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/53.jpg)
Методы класса
+ (Admin *)createAdmin;
В файле Admin.h:
![Page 54: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/54.jpg)
Методы класса
+ (Admin *)createAdmin;
В файле Admin.h:
В файле Admin.m:
![Page 55: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/55.jpg)
Методы класса
+ (Admin *)createAdmin;
+ (Admin *)createAdmin{ Admin *admin = [[Admin alloc] initWithName:@"Админ Админович"]; admin.age = 34; return admin;}
В файле Admin.h:
В файле Admin.m:
![Page 56: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/56.jpg)
Методы класса
+ (Admin *)createAdmin;
+ (Admin *)createAdmin{ Admin *admin = [[Admin alloc] initWithName:@"Админ Админович"]; admin.age = 34; return admin;}
В файле Admin.h:
В файле Admin.m:
Использование:
![Page 57: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/57.jpg)
Методы класса
+ (Admin *)createAdmin;
+ (Admin *)createAdmin{ Admin *admin = [[Admin alloc] initWithName:@"Админ Админович"]; admin.age = 34; return admin;}
В файле Admin.h:
В файле Admin.m:
Использование:
Admin *admin = [Admin createAdmin]; [admin deleteComment:10];
![Page 58: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/58.jpg)
Переменные клаcса (ivar-ы)
![Page 59: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/59.jpg)
Переменные клаcса (ivar-ы)@interface User : NSObject{ NSString *_name;}
- (void)setName:(NSString *)name;- (NSString *)name;
@end
![Page 60: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/60.jpg)
Переменные клаcса (ivar-ы)@interface User : NSObject{ NSString *_name;}
- (void)setName:(NSString *)name;- (NSString *)name;
@end
@implementation User
- (void)setName:(NSString *)name{ _name = name; }
- (NSString *)name{ return _name;}
@end
![Page 61: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/61.jpg)
Протоколы
![Page 62: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/62.jpg)
Протоколы@protocol SendMessageProtocol <NSObject>
- (void)sendMessage:(NSString *)message;
@end
![Page 63: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/63.jpg)
Протоколы@protocol SendMessageProtocol <NSObject>
- (void)sendMessage:(NSString *)message;
@end
@interface User : NSObject<SendMessageProtocol>
@end
![Page 64: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/64.jpg)
Протоколы@protocol SendMessageProtocol <NSObject>
- (void)sendMessage:(NSString *)message;
@end
@interface User : NSObject<SendMessageProtocol>
@end
@implementation User
- (void)sendMessage:(NSString *)message{ // send message}
@end
![Page 65: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/65.jpg)
Протоколы@protocol SendMessageProtocol <NSObject>
- (void)sendMessage:(NSString *)message;
@end
@interface User : NSObject<SendMessageProtocol>
@end
@implementation User
- (void)sendMessage:(NSString *)message{ // send message}
@end
id<SendMessageProtocol> sender = [[User alloc] init];[sender sendMessage:@"message"];
![Page 66: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/66.jpg)
КатегорииCommentCell.m
![Page 67: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/67.jpg)
Категории
@interface CommentCell()
@property (strong, nonatomic) UILabel *commentLabel;
@end
@implementation CommentCell
- (void)updateWithText:(NSString *)text{ self.commentLabel.text = text;}
@end
CommentCell.m
![Page 68: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/68.jpg)
Objective-C style guide• Локальные переменные: myLocalVariable
• Свойства: myProperty
• Классы: MyClass
• Методы: doSomethingWith:
• Внутренние переменные: • _myLocal
• myLocal_
• myLocal
![Page 69: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/69.jpg)
iOS
![Page 70: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/70.jpg)
MVC
Controller
ModelView
![Page 71: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/71.jpg)
View
![Page 72: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/72.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 73: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/73.jpg)
Иерархия UIView
![Page 74: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/74.jpg)
Стандартные контролы
![Page 75: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/75.jpg)
Controller
![Page 76: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/76.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 77: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/77.jpg)
@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 78: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/78.jpg)
Наполнение 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 79: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/79.jpg)
Interface Builder(демонстрация)
![Page 80: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/80.jpg)
События
![Page 81: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/81.jpg)
target, action
- (void)viewDidLoad{ [super viewDidLoad];
[self.button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];}
- (void)buttonClicked{ NSLog(@"buttonClicked");}
![Page 82: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/82.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 83: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/83.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 84: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/84.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 85: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/85.jpg)
Демонстрация IBAction, delegate, IBOutlet
![Page 86: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/86.jpg)
MVC
Controller
ModelView
![Page 87: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/87.jpg)
MVC
Controller
ModelView
outlets
![Page 88: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/88.jpg)
MVC
Controller
ModelView
outlets
![Page 89: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/89.jpg)
MVC
Controller
ModelView
delegates
outlets
![Page 90: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/90.jpg)
MVC
Controller
ModelView
delegates
outletstarget,action
![Page 91: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/91.jpg)
MVC
Controller
ModelView
delegates
outletstarget,action
![Page 92: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/92.jpg)
MVC
Controller
ModelView
delegates
outlets
notificationstarget,action
![Page 93: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/93.jpg)
AppDelegate@protocol UIApplicationDelegate<NSObject>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
}
- (void)applicationDidBecomeActive:(UIApplication *)application{
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
}
![Page 94: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/94.jpg)
AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; UIViewController *vc = [[UIViewController alloc] init]; self.window.rootViewController = vc; [self.window makeKeyAndVisible];}
![Page 95: msumobi2. Лекция 2](https://reader033.vdocuments.mx/reader033/viewer/2022052822/554dd592b4c905d10e8b4c06/html5/thumbnails/95.jpg)
Практика:Экран просмотра события
- класс Event:- title- subtitle- distance- description- image
- класс EventViewController- updateWithEvent: