资讯专栏INFORMATION COLUMN

iOS开发UI篇--一个支持图文混排的ActionSheet

jkyin / 2692人阅读

摘要:官方提供的以下方式对进行实例化从这个我们可以看出,我们只能设置文本标题,包括和,官方提供的该控件并不支持图文混排。但有的时候,交互提给我们的需求又需要我们的具有图文混排的效果,那就需要我们自己仿造系统自带的,完成该需求。

一、简介

UIActionSheet是IOS提供给我们开发者的底部弹出菜单控件,一般用于菜单选择、操作确认、删除确认等功能。
IOS官方提供的以下方式对UIActionView进行实例化:

- (instancetype)initWithTitle:(NSString *)title delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... );

从这个api我们可以看出,我们只能设置文本标题,包括destructiveButtonTitle、cancelButtonTitle和otherButtonTitles,官方提供的该控件并不支持图文混排。但有的时候,交互提给我们的需求又需要我们的ActionSheet具有图文混排的效果,那就需要我们自己仿造系统自带的ActionSheet,完成该需求。
项目演示如下:

二、使用说明 第一步、构建数据模型
@interface Item : NSObject
@property (nonatomic , strong) NSString *icon;//图片地址
@property (nonatomic , strong) NSString *title;//标题
@end
第二步、根据数据模型构建数据
Item *item1 = [[Item alloc] init];
item1.icon = @"journey_phone";
item1.title = @"15195905888";
Item *item2 = [[Item alloc] init];
item2.icon = @"journey_phone";
item2.title = @"15195905777";
Item *item3 = [[Item alloc] init];
item3.icon = @"journey_phone";
item3.title = @"15195905777";
NSArray *listData = [NSArray arrayWithObjects:item1,item2,item3, nil];
第三步、使用以上数据将控件初始化
PicAndTextActionSheet *sheet = [[PicAndTextActionSheet alloc] initWithList:listData title:@"拨打电话"];
sheet.delegate = self;//该控件使用的代理模式
[sheet showInView:self];

因为该控件使用了代理模式,所以在当前Controller需要实现以下代理方法:

-(void) didSelectIndex:(NSInteger)index{
}

该代理方法,主要是在Controller中能够实现在自定义ActionSheet中的点击事件。

三、实现原理

因为ActionSheet不能支持图片的显示,所以我们就放弃使用扩展UIActionSheet控件的方法。我在本项目中使用的是UITableView+动画,高仿ActionSheet的方法。UTableView可以制作列表选项,动画可以实现系统自带ActionSheet的自底向上和渐变效果。

注意点:

如果tableview处于uiview上面,uiview整个背景有点击事件,但是我们需要如果我们点击tableview的时候,处理tableview的点击事件,而不是uiview的事件。在这里,我们需要判断我们点击事件是否在uiview上还是在uitableview上。

解决方案如下:

1、实现代理:

2、让gesture设置为代理

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)];
tapGesture.delegate = self;

3、实现代理方法,判断点击的是否是uiview还是tableview

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    if([touch.view isKindOfClass:[self class]]){
        return YES;
    }
    return NO;
}
四、总结

任何一个复杂控件,基本上都是有基础控件组合实现而成。该扩展的ActionSheet也可以用于以下场景:

五、下载地址

Demo下载地址:这是一个我的iOS交流群:624212887,群文件自行下载,不管你是小白还是大牛热烈欢迎进群 ,分享面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。——点击:加入

如果觉得对你还有些用,就关注小编+喜欢这一篇文章。你的支持是我继续的动力。

下篇文章预告:iOS开发UI篇--一个侧滑菜单SlidingMenu

文章来源于网络,如有侵权,请联系小编删除。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17194.html

相关文章

  • [分享]iOS开发-50行代码实现图文混排

    摘要:图文混排在这两块中使用最为常见,我已经做好了图文混排。文中会讲述几点小技巧图文混排动态计算文字长度图片拉伸方法。 开头本文是技术集中的第一篇技术性文章,所以就记录一点简单且浅显易懂的东西。 现在即时通讯和朋友圈这两块功能基本上属于app的标配功能了吧。图文混排在这两块中使用最为常见,我已经做好了demo:图文混排demohttps://github.com/Joker-King...。...

    yy13818512006 评论0 收藏0
  • iOS - 收藏集 - 掘金

    摘要:动画系列之五基础动画之缩放篇旋转篇掘金这一篇主要介绍基础动画之缩放和旋转。本文主要会基于一些开源代码和个人实践,对功能性和实用性均佳,应用领域广泛的幻灯片播放库掘金的多选掘金好久 PPAsyncDrawingKit - 实现了一系列基础 UI 控件的轻量级 ASDK - iOS - 掘金一年 iOS,求职中,上海地区,邮箱:dskcpp@gmail.com PPAsyncDrawing...

    dingda 评论0 收藏0
  • iOS轻量富文本异步绘制框架

    摘要:前言如果遇到上面一个需求你会怎么处理若干个拼接我相信不论是哪种方式代码量都不小并且难以复用其他语言写富文本是那么轻松天生支持简单标签套标签而只要用过中的富文本都会觉得难用目前业界功能强大较为好用的是但设计思想是尽可能与相似所以相对使用也不是 前言 showImg(https://segmentfault.com/img/remote/1460000015424546?w=1484&h=...

    xiongzenghui 评论0 收藏0
  • fir.im Weekly - iOS 保持界面流畅的技巧

    摘要:保持界面流畅的技巧的这篇文章非常详细地分析界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互。仿微信界面由分享。是的一个开源项目,仿微信界面,可滑动,自定义图片选择器。 生命不息,coding 不止。本期 fir.im Weekly 收集了微博上的热转资源,包含 Android、iOS 开发工具、源码分享,产品 UI 设计的...

    NervosNetwork 评论0 收藏0
  • fir.im Weekly - iOS 保持界面流畅的技巧

    摘要:保持界面流畅的技巧的这篇文章非常详细地分析界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互。仿微信界面由分享。是的一个开源项目,仿微信界面,可滑动,自定义图片选择器。 生命不息,coding 不止。本期 fir.im Weekly 收集了微博上的热转资源,包含 Android、iOS 开发工具、源码分享,产品 UI 设计的...

    layman 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<