Protocol协议 按钮点击

简介: 要求:用协议模拟实现按钮的点击事件 Button.h #import @class Button;//表示实现了某个协议@protocol ButtonDelegate -(void)onClick:(Button *)btn;@end...
要求:用协议模拟实现按钮的点击事件
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实现了onclick:这个方法
    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.352 Protocol[656:303] 监听器并没有实现onClick:方法

2013-08-02 14:47:26.353 Protocol[656:303] 当前按钮是<Button: 0x100109940>

2013-08-02 14:47:26.354 Protocol[656:303] 已经监听到按钮:<Button: 0x100109940>点击了




相关文章
|
JavaScript 前端开发 安全
odoo wizard界面显示带复选框列表及勾选数据获取
odoo wizard界面显示带复选框列表及勾选数据获取
312 1
|
缓存 网络协议 网络架构
【TCP/IP】从在浏览器中输入网址按回车键说起
【TCP/IP】从在浏览器中输入网址按回车键说起
296 0
【TCP/IP】从在浏览器中输入网址按回车键说起
|
Web App开发 JavaScript 数据安全/隐私保护
fiddler使用——配置抓取https,出现提示“禁用解密”“单击配置”
fiddler使用——配置抓取https,出现提示“禁用解密”“单击配置”
fiddler使用——配置抓取https,出现提示“禁用解密”“单击配置”
SAP C4C Mashup port bindingF4帮助对话框里的数据源
我们在SAP Cloud for Customer上创建Mashup时,会选择port binding:
SAP C4C Mashup port bindingF4帮助对话框里的数据源
|
搜索推荐 定位技术
通过一个连接获取点击者IP
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396360 2017年9月9日 14:27:49跟新: 访问:https://iplogger.org/访问搜索引擎搜索图片,或者本地搜索,找一张图片传到网上可以公开访问的地方,任意图片。
2435 0