55
Views Разработка приложений для iOS Лекция 3 Глеб Тарасов [email protected]

Интуит. Разработка приложений для iOS. Лекция 3. Views

  • Upload
    -

  • View
    340

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Интуит. Разработка приложений для iOS. Лекция 3. Views

Views

Разработка приложений для iOS

Лекция 3

Глеб Тарасов[email protected]

Page 2: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

Page 3: Интуит. Разработка приложений для iOS. Лекция 3. Views

Чем отличаются строки "string1" и @"string2"

Page 4: Интуит. Разработка приложений для iOS. Лекция 3. Views

Чем отличаются строки "string1" и @"string2"

Char* NSString*C Objective-C

Page 5: Интуит. Разработка приложений для iOS. Лекция 3. Views

Как сохранить число 5 в массив?

Page 6: Интуит. Разработка приложений для iOS. Лекция 3. Views

Как сохранить число 5 в массив?

NSNumber !

@(5)

Page 7: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

- (void)deleteProfile;

Page 8: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

Метод объекта, а не класса

- (void)deleteProfile;

Page 9: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

User *user = ...

Page 10: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

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

User *user = ...

Page 11: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

Objective-C?

Page 12: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

Objective-C?

NSObject

Page 13: Интуит. Разработка приложений для iOS. Лекция 3. Views

Как вызвать метод у объекта user с

параметрами «topic», «text»

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

Page 14: Интуит. Разработка приложений для iOS. Лекция 3. Views

Как вызвать метод у объекта user с

параметрами «topic», «text»

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

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

Page 15: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

@property(nonatomic) NSInteger age;

Page 16: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

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

@property(nonatomic) NSInteger age;

Page 17: Интуит. Разработка приложений для iOS. Лекция 3. Views

Ещё немного синтаксиса

Page 18: Интуит. Разработка приложений для iOS. Лекция 3. Views

Протоколы

@protocol SendMessageProtocol !- (void)sendMessage:(NSString *)message; !@end

Page 19: Интуит. Разработка приложений для iOS. Лекция 3. Views

@interface User : NSObject<SendMessageProtocol> !@end

@implementation User !- (void)sendMessage:(NSString *)message { // send message } !@end

Page 20: Интуит. Разработка приложений для iOS. Лекция 3. Views

id<SendMessageProtocol> sender = [[User alloc] init]; ![sender sendMessage:@"message"];

Page 21: Интуит. Разработка приложений для iOS. Лекция 3. Views

Модификаторы на свойствах

• strong

• weak

@interface Car : NSObject !@property(strong, nonatomic) NSArray *wheels; !@end !@interface Wheel : NSObject !@property(weak, nonatomic) Car *car; !@end

Page 22: Интуит. Разработка приложений для iOS. Лекция 3. Views

City

Venue

Country

strong

strong

weak

weak

Page 23: Интуит. Разработка приложений для iOS. Лекция 3. Views

Си

http://ru.wikipedia.org/wiki/Си_(язык_программирования)

Page 24: Интуит. Разработка приложений для iOS. Лекция 3. Views

Структуры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 25: Интуит. Разработка приложений для iOS. Лекция 3. Views

Структурыtypedef struct { float x; float y; } Location; !Location createLocation(float x, float y) { Location l; l.x = x; l.y = y; return l; } !int main() { Location l = createLocation(1.5, 0.5); printf("location: {%g, %g}", l.x, l.y); }

Page 26: Интуит. Разработка приложений для iOS. Лекция 3. Views

Перечисленияtypedef enum { UIViewAnimationCurveEaseInOut, UIViewAnimationCurveEaseIn, UIViewAnimationCurveEaseOut, UIViewAnimationCurveLinear } UIViewAnimationCurve; !!!UIViewAnimationCurve a = UIViewAnimationCurveLinear; printf("%d", a);

Page 27: Интуит. Разработка приложений для iOS. Лекция 3. Views

View

Page 28: Интуит. Разработка приложений для iOS. Лекция 3. Views

iPhone 5: 568px!iPhone 4: 480px

320px

20px

Page 29: Интуит. Разработка приложений для iOS. Лекция 3. Views

UIView

@property(nonatomic) CGRect frame; !@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 30: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

Page 31: Интуит. Разработка приложений для iOS. Лекция 3. Views

AppDelegate.m

Page 32: Интуит. Разработка приложений для iOS. Лекция 3. Views
Page 33: Интуит. Разработка приложений для iOS. Лекция 3. Views

Controller

Page 34: Интуит. Разработка приложений для iOS. Лекция 3. Views

UIViewController

!@property(nonatomic,retain) UIView *view; !- (void)viewDidLoad; !- (void)viewWillAppear:(BOOL)animated; !- (void)viewWillDisappear:(BOOL)animated;

Page 35: Интуит. Разработка приложений для iOS. Лекция 3. Views

AppDelegate.m

Page 36: Интуит. Разработка приложений для iOS. Лекция 3. Views

ViewController.m

Page 37: Интуит. Разработка приложений для iOS. Лекция 3. Views

UILabel

Page 38: Интуит. Разработка приложений для iOS. Лекция 3. Views
Page 39: Интуит. Разработка приложений для iOS. Лекция 3. Views

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

Page 40: Интуит. Разработка приложений для iOS. Лекция 3. Views

События

Page 41: Интуит. Разработка приложений для iOS. Лекция 3. Views

target, action

- (void)viewDidLoad { [super viewDidLoad]; ! [self.button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside]; } !- (void)buttonClicked { NSLog(@"buttonClicked"); }

Page 42: Интуит. Разработка приложений для iOS. Лекция 3. Views

delegate

- (void)viewDidLoad { [super viewDidLoad]; self.textField.delegate = self; } !- (BOOL)textFieldShouldReturn:(UITextField *)textField { NSLog(@"return pressed"); } !@end

@interface ViewController : UIViewController<UITextFieldDelegate>

Page 43: Интуит. Разработка приложений для iOS. Лекция 3. Views

@protocol UITextFieldDelegate <NSObject> !@optional !- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField; - (void)textFieldDidBeginEditing:(UITextField *)textField; - (BOOL)textFieldShouldEndEditing:(UITextField *)textField; - (void)textFieldDidEndEditing:(UITextField *)textField; - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; - (BOOL)textFieldShouldClear:(UITextField *)textField; - (BOOL)textFieldShouldReturn:(UITextField *)textField; !@end

UITextFieldDelegate

Page 44: Интуит. Разработка приложений для iOS. Лекция 3. Views

Отрывок UIScrollViewDelegate

!@protocol UIScrollViewDelegate !@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 45: Интуит. Разработка приложений для iOS. Лекция 3. Views

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(@"Событие произошло"); }

Событие случилось:

Ловим событие:

Page 46: Интуит. Разработка приложений для iOS. Лекция 3. Views

NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self            selector:@selector(keyboardShown)                name:UIKeyboardDidShowNotification              object:nil];

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

Page 47: Интуит. Разработка приложений для iOS. Лекция 3. Views

MVC

Controller

ModelView

Page 48: Интуит. Разработка приложений для iOS. Лекция 3. Views

MVC

Controller

ModelView

Page 49: Интуит. Разработка приложений для iOS. Лекция 3. Views

MVC

Controller

ModelView

delegates

Page 50: Интуит. Разработка приложений для iOS. Лекция 3. Views

MVC

Controller

ModelView

delegates

target,action

Page 51: Интуит. Разработка приложений для iOS. Лекция 3. Views

MVC

Controller

ModelView

delegates

target,action

Page 52: Интуит. Разработка приложений для iOS. Лекция 3. Views

MVC

Controller

ModelView

delegatesnotificationstarget,action

Page 53: Интуит. Разработка приложений для iOS. Лекция 3. Views

Демонстрация• как сохранять ссылки на views в контроллере

• как обрабатывать нажатия UIButton

• как работать с UITextField

• как отобразить картинку • примеры других контролов

Page 54: Интуит. Разработка приложений для iOS. Лекция 3. Views

Домашнее задание• продумать из каких экранов будет состоять ваше приложение

• выбрать один из простых экранов, где только надписи, картинки, поля ввода

• реализовать его • спросить у меня, если непонятно, как что-то из этого экрана реализовать

Page 55: Интуит. Разработка приложений для iOS. Лекция 3. Views

Всё!

Глеб Тарасов [email protected] twitter.com/pilot34