UIAlertview是项目中会非常频繁使用到的一种控件,然而苹果SDK提供的UIAlertView在iOS9中被废弃了,尽管还能用然而毕竟不是长久之计;而替代品UIAlertController又是在iOS8之后才启用;除此之外,原有的UIAlertView不能满足我的日常定制化需求,尤其是与公司设计同事设计出来的样式完全不一致,所以重写一个AlertView是前段时间的一个头等大事。
自己对这个控件的开发需求:
- 使用起来和UIAlertView方法一致,降低其他业务工程师的学习成本,可以直接不看逻辑代码直接和UIAlertView一样使用
- 除了提供和<UIAlertViewDelegate>提供的一样的代理方式,还能直接用block完成回调,增加代码的紧凑性。
- 能够实现横排或者竖排自定义按钮顺序
- 除了能够对按钮颜色文字自定义,还要能预留中间一块自定义的view供业务工程师使用,满足设计师的需求。
现在代码已经基本完成,放在了github上,敬请批评指正:LXAlertView
直接贴下实现后的效果图吧:
横向排版(默认颜色):
纵向排版:
纵向排版,设置颜色自定义view:
纵向排版,自定义内容
使用上也很简单,和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 <NSObject>
@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);
}];
以上,有兴趣使用可以阅读源码,主要比较麻烦的地方就是在布局上的写法,后续还想加上对输入框的支持,敬请批评指正
网友评论