UIAlertView 加Block 扩展

本文介绍如何通过Objective-C为UIAlertView提供自定义的点击、取消、呈现、完成、即将消失、已消失及是否启用第一个其他按钮的回调机制,并通过延迟消失功能展示其实现过程。

// 定义block

typedef void(^UIAlertView_block_self_index)(UIAlertView *alertView, NSInteger btnIndex);

typedef void(^UIAlertView_block_self)(UIAlertView *alertView);

typedef BOOL(^UIAlertView_block_shouldEnableFirstOtherButton)(UIAlertView *alertView);


@interface UIAlertView (LL)

// 根据意思理解吧  不多说

- (void)handlerClickedButton:(UIAlertView_block_self_index)aBlock;

- (void)handlerCancel:(UIAlertView_block_self)aBlock;

- (void)handlerWillPresent:(UIAlertView_block_self)aBlock;

- (void)handlerDidPresent:(UIAlertView_block_self)aBlock;

- (void)handlerWillDismiss:(UIAlertView_block_self_index)aBlock;

- (void)handlerDidDismiss:(UIAlertView_block_self_index)aBlock;

- (void)handlerShouldEnableFirstOtherButton:(UIAlertView_block_shouldEnableFirstOtherButton)aBlock;


// 延时消失

- (void)showWithDuration:(NSTimeInterval)i;

@end




#undef UIAlertView_key_clicked

#define UIAlertView_key_clicked "UIAlertView.clicked"

#undef UIAlertView_key_cancel

#define UIAlertView_key_cancel "UIAlertView.cancel"

#undef UIAlertView_key_willPresent

#define UIAlertView_key_willPresent "UIAlertView.willPresent"

#undef UIAlertView_key_didPresent

#define UIAlertView_key_didPresent "UIAlertView.didPresent"

#undef UIAlertView_key_willDismiss

#define UIAlertView_key_willDismiss "UIAlertView.willDismiss"

#undef UIAlertView_key_didDismiss

#define UIAlertView_key_didDismiss "UIAlertView.didDismiss"

#undef UIAlertView_key_shouldEnableFirstOtherButton

#define UIAlertView_key_shouldEnableFirstOtherButton "UIAlertView.SEFOB"



@implementation UIAlertView (LL)


- (void)handlerClickedButton:(UIAlertView_block_self_index)aBlock

{

    self.delegate = self;

    objc_setAssociatedObject(self, UIAlertView_key_clicked, aBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);

}

- (void)handlerCancel:(void (^)(UIAlertView *alertView))aBlock

{

    self.delegate = self;

    objc_setAssociatedObject(self, UIAlertView_key_cancel, aBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);

}

- (void)handlerWillPresent:(void (^)(UIAlertView *alertView))aBlock

{

    self.delegate = self;

    objc_setAssociatedObject(self, UIAlertView_key_willPresent, aBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);

}


- (void)handlerDidPresent:(void (^)(UIAlertView *alertView))aBlock

{

    self.delegate = self;

    objc_setAssociatedObject(self, UIAlertView_key_didPresent, aBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);

}

- (void)handlerWillDismiss:(UIAlertView_block_self_index)aBlock

{

    self.delegate = self;

    objc_setAssociatedObject(self, UIAlertView_key_willDismiss, aBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);

}

- (void)handlerDidDismiss:(UIAlertView_block_self_index)aBlock

{

    self.delegate = self;

    objc_setAssociatedObject(self, UIAlertView_key_didDismiss, aBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);

}

- (void)handlerShouldEnableFirstOtherButton:(UIAlertView_block_shouldEnableFirstOtherButton)aBlock

{

    self.delegate = self;

    objc_setAssociatedObject(self, UIAlertView_key_shouldEnableFirstOtherButton, aBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);

}


#pragma mark - UIAlertViewDelegate

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

{

    UIAlertView_block_self_index block = objc_getAssociatedObject(self, UIAlertView_key_clicked);

    

    if (block)

        block(alertView, buttonIndex);

}

- (void)alertViewCancel:(UIAlertView *)alertView

{

    UIAlertView_block_self block = objc_getAssociatedObject(self, UIAlertView_key_cancel);

    

    if (block)

        block(alertView);

}

- (void)willPresentAlertView:(UIAlertView *)alertView{

    UIAlertView_block_self block = objc_getAssociatedObject(self, UIAlertView_key_willPresent);

    

    if (block)

        block(alertView);

}


- (void)didPresentAlertView:(UIAlertView *)alertView

{

    UIAlertView_block_self block = objc_getAssociatedObject(self, UIAlertView_key_didPresent);

    

    if (block)

        block(alertView);

}


- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex

{

    UIAlertView_block_self_index block = objc_getAssociatedObject(self, UIAlertView_key_willDismiss);

    

    if (block)

        block(alertView,buttonIndex);

}


- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

{

    UIAlertView_block_self_index block = objc_getAssociatedObject(self, UIAlertView_key_didDismiss);

    

    if (block)

        block(alertView, buttonIndex);

}



- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView

{

    UIAlertView_block_shouldEnableFirstOtherButton block = objc_getAssociatedObject(self, UIAlertView_key_shouldEnableFirstOtherButton);

    

    if (block)

        return block(alertView);


    return YES;

}


- (void)showWithDuration:(NSTimeInterval)i

{

    [NSTimer scheduledTimerWithTimeInterval:i

                                     target:self

                                   selector:@selector(llDismiss)

                                   userInfo:self

                                    repeats:NO];

    [self show];

}


- (void)llDismiss

{

    [self dismissWithClickedButtonIndex:0 animated:YES];

}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值