Protocolプロトコルボタンクリック

2367 ワード

要求:プロトコルシミュレーションでボタンのクリックイベントを実現する
Button.h
#import <Foundation/Foundation.h> @class  Button;  //<>  @protocol ButtonDelegate <NSObject> -(void)onClick:(Button *)btn; @end  @interface Button : NSObject //delegate   <>  @property(nonatomic,retain) id<ButtonDelegate> delegate; -(void)click; @end

Button.m:
#import "Button.h"  @implementation Button  -(void)click{     // delegate      if([_delegate respondsToSelector:@selector(onClick:)])     {         // ,          [_delegate onClick:self];     }     else     {         NSLog(@" onClick: ");     } }  -(void)dealloc{     [_delegate release];     [super dealloc]; } @end 

MyListener.h:
#import <Foundation/Foundation.h> #import "Button.h"  @interface MyListener : NSObject<ButtonDelegate>  @end

MyListener.m:
#import "MyListener.h" #import "Button.h"  @implementation MyListener -(void)onClick:(Button *)btn{     NSLog(@" :%@ ",btn); } @end

ButtonListener.h:
#import <Foundation/Foundation.h> #import "Button.h" // , <>  @interface ButtonListener : NSObject<ButtonDelegate>  @end

ButtonListener.m:
#import "ButtonListener.h"  @implementation ButtonListener -(void)onClick{     NSLog(@" "); } @end

Main:
#import <Foundation/Foundation.h> #import "Button.h" #import "ButtonListener.h" #import "MyListener.h"  int main(int argc, const char * argv[]) {      @autoreleasepool {         //          Button *btn=[[[Button alloc] init] autorelease];         //          ButtonListener *btnListener=[[[ButtonListener alloc] init] autorelease];         MyListener * mylisten=[[[MyListener alloc] init] autorelease];         //          btn.delegate=btnListener;         [btn click];         NSLog(@" %@",btn);         btn.delegate=mylisten;         [btn click];     }     return 0; }
結果:
2013-08-02 14:47:26.32 Protocol[656:303]リスナーはonClickを実現していない:方法
2013-08-02 14:47:26.33 Protocol[656:303]現在のボタンは
2013-08-02 14:47:26.34 Protocol[656:303]ボタンを傍受しました:クリックしました