Protocol协议 按钮点击

要求:用协议模拟实现按钮的点击事件

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>点击了

时间: 2024-10-14 22:52:45

Protocol协议 按钮点击的相关文章

IOS UITableViewCell详解及按钮点击事件处理实例_IOS

IOS UITableViewCell详解及按钮点击事件处理 今天突然做项目的时候,又遇到处理自定义的UITableViewCell上按钮的点击事件问题.我知道有两种方式,可是突然想不起来之前是怎么做的了,好记性不如烂笔头,还是记录一下吧. 1.第一种方式给Button加上tag值 这里分为两种:一种是直接在原生的UITableViewCell上添加UIButton按钮,然后给UIButton设置tag值,然后在控制器里的方法里通过取数据,做界面跳转等.还是举个例子吧,省的回忆半天. - (UI

ios-iphone6s 按钮点击轻轻的才有反应 反应不灵敏了

问题描述 iphone6s 按钮点击轻轻的才有反应 反应不灵敏了 iphone6s 按钮点击轻轻的才有反应 反应慢,在其他手机上没有这个问题. 我想是不是3d touch造成的这个问题. 今天在6s上面测试发现的,网上也没有满意的回答,有大神知道吗?? 解决方案 我感觉也是 3d touch的问题.毕竟加了这东西 点击起来都会有这问题. 解决方案二: 我有两个项目,代码几乎是一样的,其中有这个问题,另一个没有,很奇怪!

javascrpit-给一个按钮点击事件,点击的同时给按钮添加一个样式,怎么样使进行其他操作的时候恢复按钮的样式

问题描述 给一个按钮点击事件,点击的同时给按钮添加一个样式,怎么样使进行其他操作的时候恢复按钮的样式 比如点击弹出个对话框,我关闭对话框后,按钮恢复原来的样式 解决方案 对话框插件一般有关闭事件,你配置那个关闭事件删除添加的高亮样式即可.具体看你的对话框API了

Android Listview中Button按钮点击事件冲突解决办法

  今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录下,以便日后参考.      首先,其实Listview中Button按钮点击事件冲突这种问题压根就不是太大的问题,因为我们完全可以将一个TextView的Backgroud设置成一个selector,也可以将一个TextView设计成一个按钮的样子,这样就可以绕过ListView和Button

XP系统文件夹窗口左上角的后退按钮点击没反应怎么办

  XP系统文件夹窗口左上角的后退按钮点击没反应怎么办 1.在菜单栏空白处使用鼠标右键点击,接着我们取消"锁定工具栏"的勾选. 2.勾选"标准按钮",这样的话在标准按钮下我们窗口的后退键自然就会显示出来了,这个时候大家再点左边的小竖条,其次把标准按钮工具条拖动到我们需要放置的位置,并且勾选锁定工具栏这个选项就行了. 有遇到这问题的友友们不妨试着小编的方法操作下,相信很快就能解决了.如果友友们还有更为简便的方法,欢迎与小编留言互动哦.

Android仿知乎客户端关注和取消关注的按钮点击特效实现思路详解_Android

先说明一下,项目代码已上传至github,不想看长篇大论的也可以先去下代码,对照代码,哪里不懂点哪里. 代码在这https://github.com/zgzczzw/ZHFollowButton 前几天发现知乎关注的点击效果确实赞,查了一下实现方式,刚好看到这个问题,花了一天时间终于把这个效果实现了,现在来回答一下,很不幸,楼上各位的答案都不全对,且听我一一道来. 首先,我先详细观察了一些知乎的效果,其中有一个很神奇的地方,如图: 注意看第二张图,这个圆形在扩散的时候,圆形底下的字还在,而且新的

特别着急 请大神指点-js中的按钮点击问题,如何实现一个按钮失效,用disable=true不能实现

问题描述 js中的按钮点击问题,如何实现一个按钮失效,用disable=true不能实现 想要一个按钮一天只能被点击一次,不管页面刷不刷新,重不重新加载都之能被点击一次.我需要源代码,不需要思想.谢谢各位前辈指点. 解决方案 $(""#button"").attr(""disabled""true""); 解决方案二: 少个d function testClick(){ var btn = document

android-adb 能不能发送消息模拟按钮点击?

问题描述 adb 能不能发送消息模拟按钮点击? 比如有apk源码,启动后有确认.取消之类的选择按钮,可不可以通过adb模拟点击? 解决方案 建议看看Robotium自动测试框架的相关资料

android-我的安卓按钮点击事件无法运行,求解答

问题描述 我的安卓按钮点击事件无法运行,求解答 一点击按钮就停止运行,但是编译单个java文件就没问题,求解答,求大神们解答,谢谢啦 解决方案 没图没代码没错误日志没法脑补 解决方案二: 你把代码和log贴出来呀 解决方案三: 解决方案四: 没有button 没有监听器,当然不行呀 解决方案五: 随便写了下,你首先要找到button,然后要有个监听来监听button的点击事件