最新项目中使用到图文混排的ActionSheet,而系统自带的UIActionSheet和UIAlertController都只能显示文字而不能显示图片,于是就准备上网找一些别人造好的轮子来使用,但是找了好多都不能很好地满足我的需求。去改动别人轮子里面的源码也比较麻烦。于是我决定自己封装一个可高度自定义的ActionSheet。于是就有了下面的
YBActionSheet
的诞生。
可自定义的样式
- 可自定义标题是否显示,有标题就显示没标题就不显示;
- 可自定义消息是否显示,有消息就显示没有显示就不显示;
- 可自定义取消按钮的显示,有取消按钮标题就显示没有就不显示;
- 可自定义ActionSheet左右两边的留白;默认为0
- 可自定义ActionSheet的圆角半径;默认为0
- 可自定义ActionSheet的最大高度于屏幕高度的占比;默认为0.8,当内容很多时就可以滑动;
- 可自定义点击灰色背景是否dismiss ActionSheet;默认为YES
- 可自定义点击列表中的每一项是否dismiss ActionSheet;默认为YES
- 当然最重要的是:可自定义ActionSheet每项列表中每一列的显示样式;
尽管配置项很多,但是使用起来相当方便。
代码结构
Core分组中的YBActionSheet是ActionSheet的核心,可以使用此部分来自定义你想要的任何样式的ActionSheet。
PActionSheet是显示图片的ActionSheet。是在核心代码YBActionSheet的基础上封装出来的可直接使用的控件。
PTActionSheet是图文混排的ActionSheet。也是在核心代码YBActionSheet的基础上封装出来的可直接使用的控件。
TActionSheet是纯文本的ActionSheet。也是在核心代码YBActionSheet的基础上封装出来的可直接使用的控件。
下面看一下我自定义的三种ActionSheet的样式
1.纯图片 | 2.纯文本 | 3.图文混排 |
---|
原理
YBActionSheet的列表是使用UITableView来实现的,并且把UITableView的代理和数据源回调通过Block属性传递到外部。所以你可以自定义任何样式的UITableViewCell来自定义一个你想要的ActionSheet。看下边的Block属性代码
/**
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
*/
@property (nonatomic, copy) NSInteger (^numberOfRowsInSection)(UITableView *tableView,NSInteger section);
/**
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
*/
@property (nonatomic, copy) UITableViewCell* (^cellForRowAtIndexPath)(UITableView *tableView, NSIndexPath *indexPath);
/**
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
*/
@property (nonatomic, copy) void(^didSelectRowAtIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
/**
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
*/
@property (nonatomic, copy) CGFloat (^heightForRowAtIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
YBActionSheet的代码已托管到GitHub,点此处查看