使用OC中的协议来实现一个按钮监听器
main.m
———————————
#import <Foundation/Foundation.h>
#import "Button.h"
#import "ButtonListener.h"
#import "MyListener.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//初始化一个Button按钮
Button *btn = [[Button alloc] init];
Button *btn2 = [[Button alloc] init];
//初始化一个监听器
//ButtonListener *listener = [[ButtonListener alloc] init];
MyListener *listener2 = [[MyListener alloc] init];
//btn.delegate = listener;
//为按钮添加监听器
btn.delegate = listener2;
btn2.delegate = listener2;
//按钮点击被触发
[btn click];
[btn2 click];
}
return 0;
}
Button.h
———————————————
#import <Foundation/Foundation.h>
@class Button;
// 设置按钮监听器的协议
@protocol ButtonDelegate <NSObject]]]]>
-(void) onClick:(Button *)btn;
@end
@interface Button : NSObject
@property (nonatomic, retain) id <ButtonDelegate> delegate;
-(void) click;
@end
Button.m
———————————————
#import "Button.h"
@implementation Button
-(void) dealloc{
}
//当触发惦记事件,调用该监听器的onclick方法,并将监听button传入进去
-(void)click{
[_delegate onClick:self];
}
@end
MyListener.h
—————————————
#import <Foundation/Foundation.h>
@protocol ButtonDelegate;//作用相当于@class
//类ButtonListener实现ButtonDelegate协议
@interface MyListener : NSObject <ButtonDelegate]]]]>
@end
MyListener.m
————————————
#import "MyListener.h"
#import "Button.h"
@implementation MyListener
//实现协议中onClick方法,若不实现则报错
-(void)onClick:(Button *)btn{
NSLog(@"监听器MyListener被触发-%@", btn);
}
@end