博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十篇、自定义UIBarButtonItem和UIButton block回调
阅读量:7224 次
发布时间:2019-06-29

本文共 5724 字,大约阅读时间需要 19 分钟。

// 自定义导航栏左边按钮 self.navigationItem.leftBarButtonItem = [JQBlockedBarButtonItem blockedBarButtonItemWithTitle:@"返回" eventHandler:^{        [weakSelf.navigationController popViewControllerAnimated:YES];    }];

 

// 声明文件提供常用的接口@interface JQBlockedBarButtonItem : UIBarButtonItem+ (instancetype)blockedBarButtonItemWithTitle:(NSString *)title eventHandler:(void(^)())eventHandler;+ (instancetype)blockedBarButtonItemWithImage:(UIImage *)image eventHandler:(void (^)())eventHandler;+ (instancetype)blockedBarButtonItemWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem eventHandler:(void (^)())eventHandler;+ (instancetype)blockedBarButtonItemWithCustomView:(UIView *)customView eventHandler:(void (^)())eventHandler;@end
#import "JQBlockedBarButtonItem.h"@interface JQBlockedBarButtonItem ()@property (nonatomic, copy) void(^eventHandler)();@property (nonatomic, strong) UITapGestureRecognizer *customViewTapGestureRecognizer;@end@implementation GKBlockedBarButtonItem- (instancetype)initWithTitle:(NSString *)title {    self = [super initWithTitle:title style:UIBarButtonItemStylePlain target:nil action:nil];    [self setup];    return self;}- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem {    self = [super initWithBarButtonSystemItem:systemItem target:nil action:nil];    [self setup];    return self;}- (instancetype)initWithImage:(UIImage *)image {    self = [super initWithImage:image style:UIBarButtonItemStylePlain target:nil action:nil];    [self setup];    return self;}- (void)setup {    self.target = self;    self.action = @selector(tapped);}- (instancetype)initWithCustomView:(UIView *)customView eventHandler:(void(^)())eventHandler {    self = [super initWithCustomView:customView];    if (eventHandler) {        self.customViewTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(customViewTapGestureRecognizer:)];        [customView addGestureRecognizer:self.customViewTapGestureRecognizer];    }    self.eventHandler = eventHandler;    return self;}- (void)tapped {    if (self.eventHandler) {        self.eventHandler();    }}- (void)customViewTapGestureRecognizer:(UITapGestureRecognizer *)gr {    [self tapped];}+ (instancetype)blockedBarButtonItemWithTitle:(NSString *)title eventHandler:(void (^)())eventHandler {    GKBlockedBarButtonItem *tmp = [[GKBlockedBarButtonItem alloc] initWithTitle:title];    tmp.eventHandler = eventHandler;    return tmp;}+ (instancetype)blockedBarButtonItemWithImage:(UIImage *)image eventHandler:(void (^)())eventHandler {    GKBlockedBarButtonItem *tmp = [[GKBlockedBarButtonItem alloc] initWithImage:image];    tmp.eventHandler = eventHandler;    return tmp;}+ (instancetype)blockedBarButtonItemWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem eventHandler:(void (^)())eventHandler {    GKBlockedBarButtonItem *tmp = [[GKBlockedBarButtonItem alloc] initWithBarButtonSystemItem:systemItem];    tmp.eventHandler = eventHandler;    return tmp;}+ (instancetype)blockedBarButtonItemWithCustomView:(UIView *)customView {    return [[self class] blockedBarButtonItemWithCustomView:customView eventHandler:nil];}+ (instancetype)blockedBarButtonItemWithCustomView:(UIView *)customView eventHandler:(void (^)())eventHandler {    GKBlockedBarButtonItem *item = [[GKBlockedBarButtonItem alloc] initWithCustomView:customView eventHandler:eventHandler];    return item;}- (void)dealloc {    if (self.customView && _customViewTapGestureRecognizer) {        [self.customView removeGestureRecognizer:_customViewTapGestureRecognizer];    }}@end

 

// 自定义按钮,特意选了个最长的~   CGRect rect = CGRectMake(100, 100, 100, 100);    __weak typeof(self) weakSelf = self;    JQBlockedButton *blockedBtn = [JQBlockedButton blockedButtonWithTapHandler:^{        NSLog(@"点击了按钮");        [weakSelf.navigationController pushViewController:[TestViewController new] animated:YES];    } frame:rect addToSuperview:self.view];    blockedBtn.backgroundColor = [UIColor redColor];

 

@interface JQBlockedButton : UIButton/** *  点击事件回调 */@property (nonatomic, copy) void(^tapHandler)();/** *  快速创建带block回调的按钮 * *  @param tapHandler 回调事件 * */+ (instancetype)blockedButtonWithTapHandler:(void(^)())tapHandler;/** *  快速创建带block回调的按钮 * *  @param tapHandler 回调事件 *  @param frame      位置信息 */+ (instancetype)blockedButtonWithTapHandler:(void(^)())tapHandler frame:(CGRect)frame;/** *  快速创建带block回调的按钮,并添加到父控件 * *  @param tapHandler 回调事件 *  @param frame      位置信息 *  @param superview  父控件 */+ (instancetype)blockedButtonWithTapHandler:(void(^)())tapHandler frame:(CGRect)frame addToSuperview:(UIView *)superview;@end
@implementation JQBlockedButton- (id)initWithFrame:(CGRect)frame {    self = [super initWithFrame:frame];    [self setup];    return self;}- (void)awakeFromNib {    [super awakeFromNib];    [self setup];}- (void)setup {    [self addTarget:self action:@selector(tapped) forControlEvents:UIControlEventTouchUpInside];}- (void)tapped {    if (_tapHandler) {        _tapHandler();    }}+ (instancetype)blockedButtonWithTapHandler:(void(^)())tapHandler {    return [self blockedButtonWithTapHandler:tapHandler frame:CGRectNull addToSuperview:nil];}+ (instancetype)blockedButtonWithTapHandler:(void(^)())tapHandler frame:(CGRect)frame {    return [self blockedButtonWithTapHandler:tapHandler frame:frame addToSuperview:nil];}+ (instancetype)blockedButtonWithTapHandler:(void(^)())tapHandler frame:(CGRect)frame addToSuperview:(UIView *)superview {    GKBlockedButton *button = [GKBlockedButton new];    button.tapHandler = tapHandler;    if (!CGRectIsNull(frame)) {        button.frame = frame;    }    if (superview) {        [superview addSubview:button];    }    return button;}@end

 

转载于:https://www.cnblogs.com/HJQ2016/p/5794112.html

你可能感兴趣的文章
图元的属性---OpenGL字符属性函数
查看>>
was6.1在linux(redhat5)上静默安装与常见问题解决
查看>>
ssh-keygen 免交互 ssh首次交互免输入yes
查看>>
ssh通道连接数据库问题
查看>>
ansible使用playbook批量添加用户
查看>>
通过adb命令启动的app
查看>>
【Apollo播放器】源码分析之图片加载模式
查看>>
linux mint 19.0 partition
查看>>
docker 新手向 - 防止容器自动退出的解决方案
查看>>
Linux 内核模块 HOOK 系统调用的 demo
查看>>
小黑小波比.解决执行完代码,带指定的参数值重新加载页面
查看>>
Linux下的UDP/TCP端口映射(netcat and socat)
查看>>
Linux(Centos6.5)下如何解压.zip和.rar文件
查看>>
清理k8s集群小记(只针对自己的集群)
查看>>
印象笔记·剪藏
查看>>
一步一步在Windows下搭建React Native Android开发环境
查看>>
Gentoo:existing preserved libs问题
查看>>
Linux 常用操作
查看>>
HTTP Request header
查看>>
Android TextView支持的HTML标签
查看>>