iOS ActionSheet 可高度自定义

最新项目中使用到图文混排的ActionSheet,而系统自带的UIActionSheet和UIAlertController都只能显示文字而不能显示图片,于是就准备上网找一些别人造好的轮子来使用,但是找了好多都不能很好地满足我的需求。去改动别人轮子里面的源码也比较麻烦。于是我决定自己封装一个可高度自定义的ActionSheet。于是就有了下面的YBActionSheet的诞生。

可自定义的样式

  • 可自定义标题是否显示,有标题就显示没标题就不显示;
  • 可自定义消息是否显示,有消息就显示没有显示就不显示;
  • 可自定义取消按钮的显示,有取消按钮标题就显示没有就不显示;
  • 可自定义ActionSheet左右两边的留白;默认为0
  • 可自定义ActionSheet的圆角半径;默认为0
  • 可自定义ActionSheet的最大高度于屏幕高度的占比;默认为0.8,当内容很多时就可以滑动;
  • 可自定义点击灰色背景是否dismiss ActionSheet;默认为YES
  • 可自定义点击列表中的每一项是否dismiss ActionSheet;默认为YES
  • 当然最重要的是:可自定义ActionSheet每项列表中每一列的显示样式;

尽管配置项很多,但是使用起来相当方便。

代码结构

iOS ActionSheet 可高度自定义_第1张图片
代码结构
  • Core分组中的YBActionSheet是ActionSheet的核心,可以使用此部分来自定义你想要的任何样式的ActionSheet。

  • PActionSheet是显示图片的ActionSheet。是在核心代码YBActionSheet的基础上封装出来的可直接使用的控件。

  • PTActionSheet是图文混排的ActionSheet。也是在核心代码YBActionSheet的基础上封装出来的可直接使用的控件。

  • TActionSheet是纯文本的ActionSheet。也是在核心代码YBActionSheet的基础上封装出来的可直接使用的控件。

下面看一下我自定义的三种ActionSheet的样式

1.纯图片 2.纯文本 3.图文混排
actionSheet2.gif

原理

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,点此处查看

你可能感兴趣的:(iOS ActionSheet 可高度自定义)