实现一个自定义UIAlertView控件

UIAlertview是项目中会非常频繁使用到的一种控件,然而苹果SDK提供的UIAlertView在iOS9中被废弃了,尽管还能用然而毕竟不是长久之计;而替代品UIAlertController又是在iOS8之后才启用;除此之外,原有的UIAlertView不能满足我的日常定制化需求,尤其是与公司设计同事设计出来的样式完全不一致,所以重写一个AlertView是前段时间的一个头等大事。

自己对这个控件的开发需求:

  • 使用起来和UIAlertView方法一致,降低其他业务工程师的学习成本,可以直接不看逻辑代码直接和UIAlertView一样使用
  • 除了提供和提供的一样的代理方式,还能直接用block完成回调,增加代码的紧凑性。
  • 能够实现横排或者竖排自定义按钮顺序
  • 除了能够对按钮颜色文字自定义,还要能预留中间一块自定义的view供业务工程师使用,满足设计师的需求。

现在代码已经基本完成,放在了github上,敬请批评指正:LXAlertView

直接贴下实现后的效果图吧:
横向排版(默认颜色):

实现一个自定义UIAlertView控件_第1张图片
横向排版,默认颜色

纵向排版:

实现一个自定义UIAlertView控件_第2张图片
纵向排版,设置颜色

自定义view:


实现一个自定义UIAlertView控件_第3张图片
纵向排版,自定义内容

使用上也很简单,和UIAlertView一样的方法:
- (instancetype)initWithTitle:(NSString *)title
message:(NSString *)message
delegate:(id)delegate
cancelButtonTitle:(NSString *)cancelButtonTitle
otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION;

- (void)show;

@protocol LXAlertViewDelegate 
@optional
    - (void)alertView:(LXAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
@end

除此之外,增加了block方法,方便使用

    [alert showWithCompletionBlock:^{
        NSLog(@"展示完成");
    } dismissBlock:^(LXAlertViewStruct result) {
        NSLog(@"alertViewTag:%li, buttonIndex:%li", result.alertTag, result.buttonIndex);
    }];

以上,有兴趣使用可以阅读源码,主要比较麻烦的地方就是在布局上的写法,后续还想加上对输入框的支持,敬请批评指正

你可能感兴趣的:(实现一个自定义UIAlertView控件)