1.继承UIButton ;

2.在自己定义的button类中的方法

addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 实现block的触发

代码示例:

//  ZJBlockButton.h

//  BlockTest

//

//  Created by 何助金 on 15/4/5.

//  Copyright (c) 2015年 何助金. All rights reserved.

//

#import <UIKit/UIKit.h>

@classZJBlockButton;

typedef void (^ButtonBlock)(ZJBlockButton *);//定义一个block

@interface ZJBlockButton : UIButton

@property (nonatomic,copy)ButtonBlock block;

@end

//  ZJBlockButton.m

//  BlockTest

//

//  Created by 何助金 on 15/4/5.

//  Copyright (c) 2015年 何助金. All rights reserved.

//

#import "ZJBlockButton.h"

@implementation ZJBlockButton

-(instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

[selfaddTarget:selfaction:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];

}

returnself;

}

- (void)buttonClick:(ZJBlockButton *)sender

{

_block(self);

}

3.使用:

, , , )];

zjButton.block = ^(ZJBlockButton *button){

NSLog(@"button click!");

};

[zjButton setTitle:@"touchButton"forState:UIControlStateNormal];

zjButton.backgroundColor = [UIColor  grayColor];

[self.view addSubview:zjButton];

PS:可以用同样的方法实现 alertView的Block

//  ZJAlertView.h

//  BlockTest

//

//  Created by 何助金 on 15/4/5.

//  Copyright (c) 2015年 何助金. All rights reserved.

//

#import <UIKit/UIKit.h>

typedef void (^AlertBlock)(NSInteger);//定义block类型

@interface ZJAlertView : UIAlertView

@property (nonatomic,copy)AlertBlock block;

//需要自定义初始化方法 添加参数 block:(AlertBlock)block;

-(instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles  block:(AlertBlock)block;

@end

的方法实现 alertView的block响应 直接上代码

//  ZJAlertView.m

//  BlockTest

//

//  Created by 何助金 on 15/4/5.

//  Copyright (c) 2015年 何助金. All rights reserved.

//

#import "ZJAlertView.h"

@implementation ZJAlertView

-(instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles block:(AlertBlock)block

{

self = [super initWithTitle:title message:message delegate:self cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles,nil];

if (self) {

self.block = block ;//block 绑定

}

returnself;

}

//#pragma mark -AlertViewDelegate

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

//这里调用函数指针_block(要传进来的参数);

_block(buttonIndex);

}

应用:

- (void)creatBlockAlertView

{

ZJAlertView *alertView = [[ZJAlertViewalloc]initWithTitle:@"test"message:@"alert Block "delegate:nilcancelButtonTitle:@"cancel"otherButtonTitles:@"Ok"block:^(NSInteger index) {

NSLog(@"click at index %ld",index);

}];

[alertView show];

}

用block响应button的点击事件的更多相关文章

  1. 关于百度地图InfoWindow响应自定义布局点击事件

    大概讲解: 在百度地图上显示一个marker,当marker被点击后,显示自定义的View.当自定义的View被点击后,响应不同Button的点击事件.被百度这个infowindo里面的view坑惨了 ...

  2. (二)AS给button添加点击事件

    三种方法给Button添加点击事件 (一)通过button的id,添加继承View.OnClickListener的监听实现 <Button android:id="@+id/btn_ ...

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

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

  4. 区分listview的item和Button的点击事件

    这两天修改领导通的ListView widget,在ListView中加入Button这类的有 “点击” 事件的widget,发现原来listview的itemclick居然失效了, 后来在网上查资料 ...

  5. UITapGestureRecognizer会屏蔽掉Button的点击事件( 转载)

    UITapGestureRecognis 前几天在做项目的时候,遇到这个一个问题,在一个视图也就是UIView上添加一个手势,然后又在这个View上添加一个UIButton,然后给按钮添加事件,运行项 ...

  6. NGUI Button 3中点击事件的触发

    NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定在按钮上,点击按钮触发的方法名必须为OnClick,当 ...

  7. pyqt的多Button的点击事件的槽函数的区分发送signal的按钮。

    关键函数:QPushButton的setObjectName()/objectName() 个人注解:按功能或者区域,将按钮的点击事件绑定的不同的槽函数上. from PyQt5.QtWidgets ...

  8. ListView中响应item的点击事件并且刷新界面

    ---恢复内容开始--- 最近在在实现listview功能中遇到了这个问题: 点击事件写在了adapter的item中,不知道如何在listview的点击事件中更新数据的显示: 总结:1.要使用not ...

  9. Android 实现的EditText响应drawableRight的点击事件

    1.自定义Edittext 实现右侧图标点击清空 package com.dxw.live.view; import android.content.Context; import android.g ...

随机推荐

  1. javascript jquery 常用方法

    javascript splice()   //删除数组成员 pop()   //删除数组成员 jquery $.type(aaa)  //判断对象类型

  2. Unity模型导入导出

    从3DMAX导出,参考: http://tieba.baidu.com/p/2807225555 -> 使用3dmax 2013,会自带导出 fbx 的功能 -> 从 3dmax 导出 - ...

  3. 靠边伸缩菜单的做法(类似QQ,碰到就会伸出来)

    这段脚本主要实现一个group的伸缩功能,group里面的内容也就是菜单的内容可以自由添加. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  4. $.browser.msie 报错 null

    jQuery 1.9 移除了 $.browser 的替代方法 January 16th, 2013FwolfLeave a commentGo to comments 授权方式:署名,非商业用途,保持 ...

  5. 【转】asp.net导出数据到Excel的三种方法

    来源:http://www.cnblogs.com/lishengpeng1982/archive/2008/04/03/1135490.html 原文出处:http://blog.csdn.net/ ...

  6. Oracle translate 函数的用法, 以及和replace的区别

     translate 是用来替换字符的函数 语法:  translate(char, from_str,to_str)   其中,char是待处理的字符串. from_str是按顺序排列若干个要被替换 ...

  7. Hadoop 源码编译导出

    https://svn.apache.org/repos/asf/hadoop/common/branches/branch-trunk-win/BUILDING.txt http://www.src ...

  8. 使用druid连接池的超时回收机制排查连接泄露问题

    在工程中使用了druid连接池,运行一段时间后系统出现异常: Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: ...

  9. HTML 打印 javascript连续打印 分页

    page-break-after属性介绍:http://www.w3school.com.cn/cssref/pr_print_page-break-after.asp <div style=& ...

  10. javascript取得机器名,用户名,读写注册表,启动应用程序

    javascript取得机器名,用户名,读写注册表,启动应用程序//javascript有个特殊的对象ActiveXObject,通过它可以访问windows的本地文件系统和应用程序,比如:有的时候我 ...