美文网首页iOS技术点
iOS ActionSheet 可高度自定义

iOS ActionSheet 可高度自定义

作者: __Simon__ | 来源:发表于2017-08-21 09:55 被阅读54次

    最新项目中使用到图文混排的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.图文混排
    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 可高度自定义

        本文链接:https://www.haomeiwen.com/subject/buccdxtx.html