• iOS- 自定义UIView (测试block和代理)


    #import <UIKit/UIKit.h>

    typedef void(^compeletionHandler) (NSInteger selectButtonIndex);

    @class ZSDCustom;

    @protocol ZSDCustomDelegate <NSObject>

    -(void)showCustomView:(ZSDCustom *)customView andButtonClick:(NSInteger)selectIndex;

    @end

    @interface ZSDCustom : UIView

    @property(nonatomic,copy)compeletionHandler myHandler;

    @property(nonatomic,weak)id<ZSDCustomDelegate>delegate;

    -(void)showCustomView:(ZSDCustom *)customView andDelegate:(id)delegate andCompeleteHandler:(compeletionHandler)handler;

    @end

    #import "ZSDCustom.h"

    #define kDialogWidth 280.0f

    #define kButtonSize CGSizeMake(115.0f,45.0f)

    @implementation ZSDCustom

    {

        UIView *dialogView;

    }

    -(id)initWithFrame:(CGRect)frame

    {

        if (self=[super initWithFrame:frame])

        {

            [self setUp];

        }

        return self;

    }

    -(void)setUp

    {

        self.frame = [UIScreen mainScreen].bounds;

        self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5f];

        

        CGRect frect = CGRectZero;

        frect.size.width = kDialogWidth;

        dialogView = [[UIView alloc]initWithFrame:frect];

        dialogView.backgroundColor = [UIColor whiteColor];

        dialogView.layer.cornerRadius = 4.0f;

        dialogView.layer.masksToBounds = YES;

        [self addSubview:dialogView];

        

        //按钮

        frect.origin.x = 15.0f;

        frect.origin.y = 56.0f + 20.0f;

        frect.size = kButtonSize;

        UIButton *cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom];

        cancelBtn.frame = frect;

        [cancelBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:15.0f]];

        [cancelBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

        [cancelBtn setTitle:@"取消" forState:UIControlStateNormal];

        [cancelBtn setBackgroundColor:[UIColor colorWithRed:243.0 / 255.0f green:243.0 / 255.0f blue:243.0 / 255.0f alpha:1.0]];

        [cancelBtn addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];

        [cancelBtn.layer setBorderWidth:1.0];

        [cancelBtn.layer setBorderColor:[UIColor grayColor].CGColor];

        [cancelBtn.layer setCornerRadius:4.0f];

        [cancelBtn setTag:1];

        [dialogView addSubview:cancelBtn];

        

        frect.origin.x = kDialogWidth - 15.0f - kButtonSize.width;

        UIButton *okBtn = [UIButton buttonWithType:UIButtonTypeCustom];

        okBtn.frame = frect;

        [okBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

        [okBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:15.0f]];

        [okBtn setTitle:@"确认" forState:UIControlStateNormal];

        [okBtn setBackgroundColor:[UIColor colorWithRed:207.0 / 255.0f green:44.0 / 255.0f blue:65.0 / 255.0f alpha:1.0]];

        [okBtn addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];

        [okBtn.layer setCornerRadius:4.0f];

        [okBtn setTag:2];

        [dialogView addSubview:okBtn];

        

        float totalHeight = CGRectGetMaxY(okBtn.frame) + 20.0f;

        frect = dialogView.frame;

        frect.origin.x = (self.bounds.size.width - kDialogWidth) / 2.0f;

        frect.origin.y = (self.bounds.size.height - totalHeight) / 2.0f;

        frect.size.height = totalHeight;

        dialogView.frame = frect;

    }

    -(void)buttonClick:(UIButton *)sender

    {

        if (_myHandler) {

            _myHandler(sender.tag);

        }

        if (sender.tag==2) {

            if (_delegate&&[_delegate respondsToSelector:@selector(showCustomView:andButtonClick:)]) {

                

               [_delegate showCustomView:self andButtonClick:sender.tag];

            }

        }

        else

        {

            [self hide];

        }

    }

    -(void)show

    {

        UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;

        [keyWindow addSubview:self];

        

        dialogView.alpha = 0;

        dialogView.transform = CGAffineTransformMakeScale(0.01f, 0.01f);

        

        [UIView animateWithDuration:0.3f animations:^{

            dialogView.alpha = 1.0;

            dialogView.transform = CGAffineTransformMakeScale(1.0, 1.0);

        }];

    }

    -(void)hide

    {

        [UIView animateWithDuration:0.3f animations:^{

            dialogView.alpha = 0;

            dialogView.transform = CGAffineTransformMakeScale(0.01f, 0.01f);

        } completion:^(BOOL finished) {

            [self removeFromSuperview];

        }];

    }

    -(void)showCustomView:(ZSDCustom *)customView andDelegate:(id)delegate andCompeleteHandler:(compeletionHandler)handler

    {

        [customView show];

        _delegate=delegate;

        _myHandler=handler;

    }

    @end

    #import "ViewController.h"

    #import "ZSDCustom.h"

    @interface ViewController ()<ZSDCustomDelegate>

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view, typically from a nib.

    }

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

    - (IBAction)showViewBtnClick:(UIButton *)sender

    {

        

        ZSDCustom *custom=[[ZSDCustom alloc]initWithFrame:CGRectZero];

        

        [custom showCustomView:custom andDelegate:self andCompeleteHandler:^(NSInteger selectButtonIndex) {

            

            NSLog(@"selectButtonIndex=%ld",selectButtonIndex);

        }];

    }

    -(void)showCustomView:(ZSDCustom *)customView andButtonClick:(NSInteger)selectIndex

    {

     NSLog(@"selectIndex=%ld",selectIndex);

    }

    @end

  • 相关阅读:
    注解
    es
    集合collection-map-list-set
    spring boot Configuration Annotation Proessor not found in classpath
    mvn
    linux_elasticsearch_jdk_ssh
    Floyd算法学习
    同一个job,不同shell之间传递参数
    jenkins post build tasks插件中log text参数的使用说明
    一个强大的jenkins 批量修改job的插件Configuration Slicing
  • 原文地址:https://www.cnblogs.com/thbbsky/p/4122546.html
Copyright © 2020-2023  润新知