• UIButton的两种block传值方式


    UIButton的两种block传值方式

    方式1 - 作为属性来传值

    BlockView.h 与 BlockView.m

    //
    //  BlockView.h
    //  Block
    //
    //  Created by YouXianMing on 15/1/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    @class BlockView;
    
    /**
     定义枚举值
     */
    typedef enum : NSUInteger {
        LEFT_BUTTON = 0x19871220,
        RIGHT_BUTTON,
    } BUTTON_FLAG;
    
    /**
     *  定义block
     *
     *  @param flag      枚举值
     *  @param blockView 当前的blockView
     */
    typedef void (^ButtonEvent)(BUTTON_FLAG flag, BlockView *blockView);
    
    @interface BlockView : UIView
    
    @property (nonatomic, copy)   ButtonEvent   buttonEvent; // 作为属性的block
    
    @property (nonatomic, strong) NSString     *leftTitle;
    @property (nonatomic, strong) NSString     *rightTitle;
    
    @end
    //
    //  BlockView.m
    //  Block
    //
    //  Created by YouXianMing on 15/1/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "BlockView.h"
    
    @interface BlockView ()
    
    @property (nonatomic, strong) UIButton  *leftButton;
    @property (nonatomic, strong) UIButton  *rightButton;
    
    @end
    
    @implementation BlockView
    
    - (instancetype)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
            
            // 获取尺寸相关内容
            CGFloat width       = frame.size.width;
            CGFloat height      = frame.size.height;
            CGFloat buttonWidth = width / 2.f;
            
            // 初始化按钮
            self.leftButton     = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, buttonWidth, height)];
            self.leftButton.tag = LEFT_BUTTON;
            [self.leftButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
            [self.leftButton setTitleColor:[UIColor redColor]  forState:UIControlStateHighlighted];
            [self.leftButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
            [self.leftButton addTarget:self
                                action:@selector(buttonEvents:)
                      forControlEvents:UIControlEventTouchUpInside];
            self.leftButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:12.f];
            [self addSubview:self.leftButton];
            
            self.rightButton     = [[UIButton alloc] initWithFrame:CGRectMake(buttonWidth, 0, buttonWidth, height)];
            self.rightButton.tag = RIGHT_BUTTON;
            [self.rightButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
            [self.rightButton setTitleColor:[UIColor redColor]  forState:UIControlStateHighlighted];
            [self.rightButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
            [self.rightButton addTarget:self
                                 action:@selector(buttonEvents:)
                       forControlEvents:UIControlEventTouchUpInside];
            self.rightButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:12.f];
            [self addSubview:self.rightButton];
            
        }
        return self;
    }
    
    - (void)buttonEvents:(UIButton *)button {
        // 如果有block值,则从block获取值
        if (self.buttonEvent) {
            self.buttonEvent(button.tag, self);
        }
    }
    
    #pragma mark - 重写setter,getter方法
    @synthesize leftTitle = _leftTitle;
    - (void)setLeftTitle:(NSString *)leftTitle {
        _leftTitle = leftTitle;
        [self.leftButton setTitle:leftTitle forState:UIControlStateNormal];
    }
    - (NSString *)leftTitle {
        return _leftTitle;
    }
    
    @synthesize rightTitle = _rightTitle;
    - (void)setRightTitle:(NSString *)rightTitle {
        _rightTitle = rightTitle;
        [self.rightButton setTitle:rightTitle forState:UIControlStateNormal];
    }
    - (NSString *)rightTitle {
        return _rightTitle;
    }
    
    @end

    控制器源码:

    //
    //  ViewController.m
    //  Block
    //
    //  Created by YouXianMing on 15/1/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "BlockView.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
     
        BlockView *blockView        = [[BlockView alloc] initWithFrame:CGRectMake(0, 0, 200, 30)];
        blockView.layer.borderWidth = 1.f;
        blockView.leftTitle         = @"YouXianMing";
        blockView.rightTitle        = @"NoZuoNoDie";
        
        // 从block中获取到事件
        blockView.buttonEvent       = ^(BUTTON_FLAG flag, BlockView *blockView) {
            NSLog(@"%lu", flag);
        };
        
        blockView.center            = self.view.center;
        
        [self.view addSubview:blockView];
    }
    
    @end

    方式2 - 作为方法来传值

    BlockView.h 与 BlockView.m

    //
    //  BlockView.h
    //  Block
    //
    //  Created by YouXianMing on 15/1/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    @class BlockView;
    
    /**
     定义枚举值
     */
    typedef enum : NSUInteger {
        LEFT_BUTTON = 0x19871220,
        RIGHT_BUTTON,
    } BUTTON_FLAG;
    
    /**
     *  定义block
     *
     *  @param flag      枚举值
     *  @param blockView 当前的blockView
     */
    typedef void (^ButtonEvent)(BUTTON_FLAG flag, BlockView *blockView);
    
    @interface BlockView : UIView
    
    @property (nonatomic, strong) NSString     *leftTitle;
    @property (nonatomic, strong) NSString     *rightTitle;
    
    /**
     *  定义成方法来实现
     *
     *  @param buttonEvent block
     */
    - (void)buttonEvent:(ButtonEvent)buttonEvent;
    
    @end
    //
    //  BlockView.m
    //  Block
    //
    //  Created by YouXianMing on 15/1/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "BlockView.h"
    
    @interface BlockView ()
    
    @property (nonatomic, strong) UIButton    *leftButton;
    @property (nonatomic, strong) UIButton    *rightButton;
    @property (nonatomic, copy)   ButtonEvent  buttonEvent;
    
    @end
    
    @implementation BlockView
    
    - (instancetype)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
            
            // 获取尺寸相关内容
            CGFloat width       = frame.size.width;
            CGFloat height      = frame.size.height;
            CGFloat buttonWidth = width / 2.f;
            
            // 初始化按钮
            self.leftButton     = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, buttonWidth, height)];
            self.leftButton.tag = LEFT_BUTTON;
            [self.leftButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
            [self.leftButton setTitleColor:[UIColor redColor]  forState:UIControlStateHighlighted];
            [self.leftButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
            [self.leftButton addTarget:self
                                action:@selector(buttonEvents:)
                      forControlEvents:UIControlEventTouchUpInside];
            self.leftButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:12.f];
            [self addSubview:self.leftButton];
            
            self.rightButton     = [[UIButton alloc] initWithFrame:CGRectMake(buttonWidth, 0, buttonWidth, height)];
            self.rightButton.tag = RIGHT_BUTTON;
            [self.rightButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
            [self.rightButton setTitleColor:[UIColor redColor]  forState:UIControlStateHighlighted];
            [self.rightButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
            [self.rightButton addTarget:self
                                 action:@selector(buttonEvents:)
                       forControlEvents:UIControlEventTouchUpInside];
            self.rightButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:12.f];
            [self addSubview:self.rightButton];
        }
        return self;
    }
    
    - (void)buttonEvents:(UIButton *)button {
        if (self.buttonEvent) {
            self.buttonEvent(button.tag, self);
        }
    }
    
    - (void)buttonEvent:(ButtonEvent)buttonEvent {
        // 初始化block
        self.buttonEvent = ^(BUTTON_FLAG flag, BlockView *blockView) {
            if (buttonEvent) {
                buttonEvent(flag, blockView);
            }
        };
    }
    
    #pragma mark - 重写setter,getter方法
    @synthesize leftTitle = _leftTitle;
    - (void)setLeftTitle:(NSString *)leftTitle {
        _leftTitle = leftTitle;
        [self.leftButton setTitle:leftTitle forState:UIControlStateNormal];
    }
    - (NSString *)leftTitle {
        return _leftTitle;
    }
    
    @synthesize rightTitle = _rightTitle;
    - (void)setRightTitle:(NSString *)rightTitle {
        _rightTitle = rightTitle;
        [self.rightButton setTitle:rightTitle forState:UIControlStateNormal];
    }
    - (NSString *)rightTitle {
        return _rightTitle;
    }
    
    @end

    控制器源码:

    //
    //  ViewController.m
    //  Block
    //
    //  Created by YouXianMing on 15/1/14.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "BlockView.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
     
        BlockView *blockView        = [[BlockView alloc] initWithFrame:CGRectMake(0, 0, 200, 30)];
        blockView.layer.borderWidth = 1.f;
        blockView.leftTitle         = @"YouXianMing";
        blockView.rightTitle        = @"NoZuoNoDie";
        
        [blockView buttonEvent:^(BUTTON_FLAG flag, BlockView *blockView) {
            NSLog(@"%lu", flag);
        }];
        
        blockView.center            = self.view.center;
        
        [self.view addSubview:blockView];
    }
    
    @end

  • 相关阅读:
    全栈项目搭建 ------- express
    全栈项目搭建 ------- mysql
    全栈项目搭建 ------- pm2
    基于mysql+node+vue-ssr+webpack全栈项目搭建
    前端技能2020
    项目线上地址汇总2020
    实现一个脚手架
    下载漏洞
    java学习笔记(13-接口、final、多态)
    java学习笔记(12-继承、抽象类)
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4225023.html
Copyright © 2020-2023  润新知