首页 > 代码库 > iOS- 自定义UIView (测试block和代理)

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

 

 

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