博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发UI篇--一个支持图文混排的ActionSheet
阅读量:5752 次
发布时间:2019-06-18

本文共 2405 字,大约阅读时间需要 8 分钟。

一、简介

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://juejin.im/post/5bec309d51882579117f617a

你可能感兴趣的文章
hiveserver2修改线程数
查看>>
XML教程
查看>>
oracle体系结构
查看>>
Microsoft Exchange Server 2010与Office 365混合部署升级到Exchange Server 2016混合部署汇总...
查看>>
Proxy服务器配置_Squid
查看>>
开启“无线网络”,提示:请启动windows零配置wzc服务
查看>>
【SDN】Openflow协议中对LLDP算法的理解--如何判断非OF区域的存在
查看>>
纯DIV+CSS简单实现Tab选项卡左右切换效果
查看>>
栈(一)
查看>>
ios 自定义delegate(一)
查看>>
创建美国地区的appleId
查看>>
例题10-2 UVa12169 Disgruntled Judge(拓展欧几里德)
查看>>
JS 原生ajax写法
查看>>
Composer管理PHP依赖关系
查看>>
React.js学习笔记之JSX解读
查看>>
我所了解的Libevent和SEDA架构
查看>>
Socket编程问题小记
查看>>
基于Flask-Angular的项目组网架构与部署
查看>>
一张图道尽程序员的出路
查看>>
redis 常用命令
查看>>