Курсы по мобильной разработке. 2 лекция. Построение...
DESCRIPTION
TRANSCRIPT
Построение интерфейсовViews, controllers
Разработка под iOS
Лекция 2
Глеб Тарасов
Вспомним прошлое занятие
Что значит минус перед определением метода?
- (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;
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);
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;
...
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(@"Событие произошло");}
Событие случилось:
Ловим событие:
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
outletsnotificationstarget,action
Демонстрация
• UIView
• UIViewController
• UIButton
• UILabel
• UIImageView
Что мы сегодня узнали?
Какой класс базовый для всех интерфейсных элементов?
Какой класс базовый для всех интерфейсных элементов?
UIView
Какой класс базовый для всех контроллеров?
Какой класс базовый для всех контроллеров?
UIViewController
Как контроллер получает ссылку на view в Interface
Builder?
Как контроллер получает ссылку на view в Interface
Builder?
через IBOutlet
Как контроллер узнает об изменениях в модели?
Как контроллер узнает об изменениях в модели?
через notification-ы
Как view сообщает контроллеру о действиях
пользователя?
Как view сообщает контроллеру о действиях
пользователя?
через target/action и delegate
Темы для подготовкиНаписать приложение-демонстрацию
UIWebView(например, простой
браузер: адресная строка,
кнопки назад/вперед)
Темы для подготовкиНаписать приложение-демонстрацию
UIScrollView
(например, прокрутка нескольких картинок с пагинацией и без)
Темы для подготовкиНаписать приложение-демонстрацию
MKMapView
(например, карта с корпусами МГУ)
Темы для подготовкиНаписать приложение-демонстрацию
UITableView(например, вывести список строк из файла в таблицу)