際際滷
Submit Search
iOSハンズオントレ`ニング observer (delegate,notification,KVO)
?
4 likes
?
6,283 views
寄消隠
Follow
或恢壊艶姻厩艶姻パタ`ンについて、禽艶鉛艶乙温岳艶,鰻看岳庄韓庄界温岳庄看稼,悪閣或を聞ってg廾する圭隈を僥びます。
Read less
Read more
1 of 22
Download now
Downloaded 17 times
More Related Content
iOSハンズオントレ`ニング observer (delegate,notification,KVO)
1.
iOSハンズオントレ`ニング Delegate(溜j)、Noti?cation(宥岑)、KVO(キ`アO) ?寄消隠?
2.
朕肝 Observerパタ`ン Delegate(溜j) Noti?cation(宥岑) KVO : Key-Value
或恢壊艶姻厩庄稼乙(キ`シ猜)
3.
Observerパタ`ン Observerパタ`ンに鞠するのは、2つのクラスだ。 Oするクラスと、Oされて宥岑を佩うクラスだ。 Oするクラスの圭を、Observerクラスと柵ぼう。 もう匯圭のOされるクラスの圭は、Subjectクラ スとする。
4.
Delegate(溜j) 溜j圷オブジェクトのポインタを卞j枠オブジェクトで 隠隔し、溜j枠オブジェクトから溜j圷オブジェクトの メソッドをコ`ルする。???コ`ルバック
5.
Delegateg廾 g廾イメ`ジ アルバムに亟寔を塘崔、亟寔がタップされ たらそのxばれた亟寔のI尖をしたい。 O箸Observerクラス Oされる箸Subject をUIView クラスをUIImageView タップされた らHクラスの メソッドをコ` ルバックする。
6.
Delegateg廾 Subjectクラスの恬撹 UIImageViewクラスを仟たに恬撹する。 UIImageViewクラスに、Observerクラスのポインタを 隠隔するメンバ篳を弖紗する。 ユ`ザ荷恬を鞭け原けるように筝する。 self.userInteractionEnabled = YES; タップされたら、Observerクラスのメソッドをコ`ル する。 ☆ベ`スとなるプロジェクトをダウンロ`ドしてください。 https:/ /github.com/ovjang/NoUseStoryBoard_Observer
7.
// // // PictureView.h ! #import <UIKit/UIKit.h> ! @interface PictureView
: UIImageView { @private NSObject *delegate_; } ! @property NSObject *delegate; ! @end // // // PictureView.m ! #import "PictureView.h" ! @implementation PictureView @synthesize delegate = delegate_; ! - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code self.userInteractionEnabled = YES; // UIImageViewはデフォルトでNoなので廣吭 } return self; } ! - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if(delegate_ !=nil) { [delegate_ pictureSelected]; } } ! @end
8.
Delegateg廾 ┘廛蹈肇灰襪臨撹 プロトコルを仟たに恬撹する。 subjectクラスのメンバ篳に、プロトコルを峺協 する。 タップされたHに柵ぶメソッドで、プロトコルに していることを_Jする。
9.
// // PictureViewDelegate.h?(javaでいうところのインタ`フェ`ス) // ! #import <Foundation/Foundation.h> ! @protocol PictureViewDelegate
<NSObject> @optional -(void)pictureSelected; // 渇鵐瓮愁奪 ! @end // // // PictureView.h ! #import <UIKit/UIKit.h> #import "PictureViewDelegate.h" ! @interface PictureView : UIImageView { @private NSObject <PictureViewDelegate> *delegate_; } @property NSObject <PictureViewDelegate> *delegate; @end // // // PictureView.m ! #import "PictureView.h" ! @implementation PictureView @synthesize delegate = delegate_; ! - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code self.userInteractionEnabled = YES; } return self; } ! - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if(delegate_ !=nil) { if ([delegate_ conformsToProtocol:@protocol(PictureViewDelegate)]) { if ([delegate_ respondsToSelector:@selector(pictureSelected)]) { [delegate_ pictureSelected]; } } } } @end
10.
Delegateg廾 Observerクラスの恬撹 屡贋のUIViewControllerを、Observerクラスにしま す。また、プロトコルにさせる。 Subjectクラスを、newして鮫中に塘崔する。 Subjectクラスのメンバ篳に、徭蛍のポインタを鯉{ する。 プロトコルにあるメソッドをg廾する。
11.
// Screen1ViewController.h ! #import <UIKit/UIKit.h> #import "PictureViewDelegate.h" ! @interface
Screen1ViewController : UIViewController <PictureViewDelegate> ! @end / ! Screen1ViewController.m #import "Screen1ViewController.h" #import "PictureView.h" ! @interface Screen1ViewController () ! @end ! @implementation Screen1ViewController ! - (id)init { self = [super init]; if (self) { // Custom initialization self.title = @"Album"; self.view.backgroundColor = [UIColor grayColor]; } return self; } ! - (void)viewDidLoad { [super viewDidLoad]; UIImage* image01 = [UIImage imageNamed:@"picture01.jpeg"]; PictureView* uiImageView1 = [[PictureView alloc] initWithFrame:CGRectMake(10, 10, 100, 150)]; uiImageView1.delegate = self; uiImageView1.image = image01; [self.view addSubview:uiImageView1]; ! UIImage* image02 = [UIImage imageNamed:@"picture02.jpeg"]; PictureView* uiImageView2 = [[PictureView alloc] initWithFrame:CGRectMake(120, 10, 100, 150)]; uiImageView2.delegate = self; uiImageView2.image = image02; [self.view addSubview:uiImageView2]; } ! -(void)pictureSelected { NSLog(@"Push"); } ! @end
12.
Noti?cation(宥岑) 嶼初叨がObserverクラスと、Subjectクラ スのひも原けとBjを佩う。 OK Tapって宥岑があったら縮えてね Observer クラス Subject クラス NSnoti?cationCenter addObserver 宥岑があったら、これを コ`ルバックしてね Observer クラス 。 Tapって宥岑を僕る NSnoti?cationCenter postNoti?cation Subject クラス 宥岑あった Tapって宥岑をあったよ。 Observer クラス NSnoti?cationCenter コ`ルバック Subject クラス
13.
Noti?cationg廾 Noti?cationCenterにObserber鞠h NSNotificationCenterを函誼する。 Observerを鞠hする。岑らせて圀しい宥岑と、岑らせ るHに柵び竃してもらうセレクタ`を峺協する。┐海 弟の卦並だけ、縮えてねということもできます。
14.
// // // Screen1ViewController.m ! #import "Screen1ViewController.h" #import "PictureView.h" ! @interface
Screen1ViewController () ! @end ! @implementation Screen1ViewController ! - (id)init { self = [super init]; if (self) { // Custom initialization self.title = @"Album"; self.view.backgroundColor = [UIColor grayColor]; // NSNotificationCenterを函誼する NSNotificationCenter* center; center = [NSNotificationCenter defaultCenter]; // Observerとして鞠hする [center addObserver:self selector:@selector(pictureSelected:) name:@"PictureTaped" object:nil]; } return self; }
15.
Noti?cationg廾 宥岑を僕る NSNotificationCenterを函誼する。 僕る宥岑(NSNotification)を恬撹する。 NSNotificationCenterに、宥岑を僕る。
16.
// // // PictureView.m ! #import "PictureView.h" ! @implementation PictureView ! -
(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code self.userInteractionEnabled = YES; } return self; } ! - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // NSNotificationを恬撹する NSNotification* notification; notification = [NSNotification notificationWithName:@"PictureTaped" object:self userInfo:nil]; // NSNotificationCenterを函誼する NSNotificationCenter* center; center = [NSNotificationCenter defaultCenter]; // 宥岑を佩う [center postNotification:notification]; } ! @end // // // PictureViewDelegate.h ! #import <Foundation/Foundation.h> ! @protocol PictureViewDelegate <NSObject> @optional -(void)pictureSelected:(NSNotification *)notification; ! @end
17.
Noti?cationg廾 宥岑を鞭け函る コ`ルバックされてくるメソッドで、宥岑 (NSNotification)を鞭け函る。 NSNotificationに根まれる秤鵝 UserInfo(NSDictionary)の嶄附をもとに駅勣な I尖を佩う。
18.
// // // Screen1ViewController.m ! #import "Screen1ViewController.h" #import "PictureView.h" ! @interface
Screen1ViewController () ! @end ! @implementation Screen1ViewController ! - (id)init { self = [super init]; if (self) { // Custom initialization self.title = @"Album"; self.view.backgroundColor = [UIColor grayColor]; // NSNotificationCenterを函誼する NSNotificationCenter* center; center = [NSNotificationCenter defaultCenter]; // Observerとして鞠hする [center addObserver:self selector:@selector(pictureSelected:) name:@"PictureTaped" object:nil]; } return self; } ! - (void)viewDidLoad { [super viewDidLoad]; UIImage* image01 = [UIImage imageNamed:@"picture01.jpeg"]; PictureView* uiImageView1 = [[PictureView alloc] initWithFrame:CGRectMake(10, 10, 100, 150)]; uiImageView1.image = image01; uiImageView1.tag = 1; [self.view addSubview:uiImageView1]; ! UIImage* image02 = [UIImage imageNamed:@"picture02.jpeg"]; PictureView* uiImageView2 = [[PictureView alloc] initWithFrame:CGRectMake(120, 10, 100, 150)]; uiImageView2.image = image02; uiImageView2.tag = 2; [self.view addSubview:uiImageView2]; } ! -(void)pictureSelected:(NSNotification*)notification { NSLog(@"Push %@",notification.userInfo); } ! @end
19.
KVO(キ`アO) キ`アOとは、ほかのオブジェクトに奉する蒙協の プロパティの篁について宥岑をオブジェクトが鞭け 函れるようにする碧Mみです。(キ`アOに駅勣な メソッドは、ル`トクラスであるNSObjectにg廾さ れている。
20.
KVOg廾 Subjectクラス Oする、魍屬張ラスを恬撹する。 // // // KVOclass.h ! #import <Foundation/Foundation.h> ! @interface KVOclass
: NSObject { int value_; } @property int value; ! @end // // // KVOclass.m ! #import "KVOclass.h" ! @implementation KVOclass @synthesize value = value_; ! @end
21.
KVOg廾 Subjectクラス Subjectクラスにオブザ`バ`を弖紗する。 OBserverクラスに、筝宥岑を鞭け函るメソッド を、オ`バ`ライドする。
22.
// // // Screen1ViewController.m ! #import "Screen1ViewController.h" #import "KVOclass.h" @interface
Screen1ViewController () ! @end ! @implementation Screen1ViewController ! - (id)init { self = [super init]; if (self) { // Custom initialization self.title = @"KVO Test"; self.view.backgroundColor = [UIColor grayColor]; } return self; } ! - (void)viewDidLoad { [super viewDidLoad]; ! ! KVOclass* kvo01 = [KVOclass new]; [kvo01 addObserver:self forKeyPath:@"value" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil]; KVOclass* kvo02 = [KVOclass new]; [kvo02 addObserver:self forKeyPath:@"value" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil]; kvo01.value = 1; // 、筝 } ! - (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context { if ([keyPath isEqual:@"value"]) { NSLog(@"New Key = %@",[change objectForKey:NSKeyValueChangeNewKey]); } } ! @end
Download