Upload
-
View
2.059
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
MVC, View, Controllers
Разработка приложений для iOS
Лекция 2
Глеб Тарасов
Приватные свойства или поля?
http://stackoverflow.com/questions/411048/differences-between-private-fields-and-private-properties
Вспомним прошлое занятие
Какой метод управления памятью используется в языке Си?
Какой метод управления памятью используется в языке Си?
Ручное выделение памяти, удаление
Какой метод управления памятью используется в языке Си?
А в Objective-C?
Ручное выделение памяти, удаление
Какой метод управления памятью используется в языке Си?
А в Objective-C?
Ручное выделение памяти, удаление
Подсчет ссылок
Чем отличаются строки "string1" и @"string2"
Чем отличаются строки "string1" и @"string2"
Char* NSString*
Как сохранить число 5 в массив?
Как сохранить число 5 в массив?
NSNumber
Что такое «strong» и «weak»?
Чем они отличаются?
Что такое «strong» и «weak»?
Чем они отличаются?
модификаторы у свойств,strong увеличивает счетчик ссылок,
weak нет
Что значит минус перед определением
- (void)deleteProfile;
Что значит минус перед определением
Экземплярный метод
- (void)deleteProfile;
Из чего состоит свойство?
@property(nonatomic) NSInteger age;
Из чего состоит свойство?
getter, setter, внутренняя переменная
@property(nonatomic) NSInteger age;
Как создать объект?
User *user = ...
Как создать объект?
User *user = [[User alloc] init];
User *user = ...
Какой базовый класс для всех объектов в
Objective-C?
Какой базовый класс для всех объектов в
Objective-C?
NSObject
Как вызвать метод у объекта user с
параметрами «topic», «text»
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;
Как вызвать метод у объекта user с
параметрами «topic», «text»
[user postCommentWithTopic:@"topic" andText:@"text"];
- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;
MVC
Controller
ModelView
View
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;
Иерархия UIView
Стандартные контролы
Controller
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);
@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
Наполнение 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];}
Interface Builder(демонстрация)
События
target, action
- (void)viewDidLoad{ [super viewDidLoad];
[self.button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];}
- (void)buttonClicked{ NSLog(@"buttonClicked");}
delegate
- (void)viewDidLoad{ [super viewDidLoad]; self.tableView.delegate = self;}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"select row");}
@interface ViewController : UIViewController<UITableViewDelegate>
Отрывок 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;
...
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(@"Событие произошло");}
Событие случилось:
Ловим событие:
MVC
Controller
ModelView
MVC
Controller
ModelView
outlets
MVC
Controller
ModelView
outlets
MVC
Controller
ModelView
delegates
outlets
MVC
Controller
ModelView
delegates
outletstarget,action
MVC
Controller
ModelView
delegates
outletstarget,action
MVC
Controller
ModelView
delegates
outlets
notificationstarget,action
Демонстрация
Что мы сегодня узнали?
Какой класс базовый для всех
интерфейсных элементов?
Какой класс базовый для всех
интерфейсных элементов?
UIView
Какой класс базовый для всех
контроллеров?
Какой класс базовый для всех
контроллеров?
UIViewController
Как контроллер получает ссылку на view в Interface
Builder?
Как контроллер получает ссылку на view в Interface
Builder?
через IBOutlet
Как контроллер узнает об изменениях в модели?
Как контроллер узнает об изменениях в модели?
через notification-ы
Как view сообщает контроллеру о действиях пользователя?
Как view сообщает контроллеру о действиях пользователя?
через target/action и delegate
Темы для подготовкиНаписать приложение-демонстрацию
UIWebView(например, простой
браузер: адресная строка,
кнопки назад/вперед)
Темы для подготовкиНаписать приложение-демонстрацию
UIScrollView(например, прокрутка нескольких картинок
с пагинацией и без)
Темы для подготовкиНаписать приложение-демонстрацию
MKMapView
(например, карта с указанием на ваш дом)
Темы для подготовкиНаписать приложение-демонстрацию
UITableView(например, вывести список строк из файла в таблицу)
Спасибо
Глеб Тарасов[email protected]/pilot34