swift 分享share页面封装(功能按钮不同)
关于分享功能的页面应该有很多,写这篇swift版本的分享页面,根据不同模块可能分享的功能按钮不一样,引言:
想必大家都使用微博右上角更多按钮,会弹出如下的界面:

在开发中,可能针对同一个app的不同按钮,要分享的平台和功能按钮选项是不同的,这就需要开发者在开发之前就要设计封装好,此次根据项目本身进行封装了一份,希望对大家有所帮助!
一、概述
在封装项目效果如下,里面的内容,可以自行在枚举中添加(下面代码会说到)-

- 黄色内容是提示语,放在UILabel中
- 红色内容是分享的平台,可以滚动,放在UICollectionView中
- 绿色内容是功能模块,可以滚动,放在UICollectionView中
- 蓝色内容是取消按钮,放在UIButton中
对于上面的布局,估计很多人都会布局成功,重点讲述一下,自己项目中怎么封装出来不同模块,分享页面不一的情况!下面是代码的主体结构:

二、详解(附带代码)
1. XYZShareEnum - 存放枚举类型
XYShareEnum用于存放分享平台、功能按钮以及使用场景内容和判断!
1.1 首先看一下分享平台设置
如下图:
通过这个枚举设置分享平台,可以自行选择设置分享的内容.
1.2 然后看功能选项按钮
如下图:
利用的同样的方法结构,添加功能性按钮选项,可以根据需求增加需要的功能按钮,并导入图片.
1.3 最后使用场景枚举

上面是不同场景分享不同的第三方平台,如果功能性按钮,分享的页面也都不同,也可书写类似的枚举进行管理.basic代表基本的第三方选项;myItem代表是公司开发的其他app,分享到自己公司app上
2. XYZShareViewController - 布局以及页面展示
XYZShareViewController 用于页面布局展示,以及处理响应的点击事件

首先定义tools,代表功能性按钮选择,存放XYZShareToolEnum的枚举功能选项,type:用于存放平台的选择,代表basic与myItem两个选项,block:
clickItemHandle用于点击某一个item.


上面的collectionView用于分享平台的展示,下面的toolsCollectionView存放的是功能性按钮.

上面的convenience init方法用于接受使用场景,下面的类方法show,用于在适合弹出分享页面的时候调用
在数据源方面处理的代码如下:

用于显示功能和平台展示的区别和赋值.
3. XYZShareInfo -分享内容回调
XYZShareInfo: 用于在UICollectionView中did事件处理,点击某个Item分享内容

4. 使用方法
在ViewController中,点击分享按钮,弹框显示,代码如下:

发现函数返回时XYZShareInfo,在里面处理要分享的内容
上面就是公司项目中在不同场景使用不同分享页面的封装
代码git: https://github.com/zxy1829760/XYZShareTool
希望对大家在项目中思路和解决问题有所帮助,谢谢
swift 分享share页面封装(功能按钮不同)的更多相关文章
- 微信小程序一个页面多个按钮分享怎么处理
首先呢,第一步先看api文档: 组件:button https://developers.weixin.qq.com/miniprogram/dev/component/button.html 框架- ...
- OAF在打开的新页面中添加按钮,功能是关闭当前页面
OAF在打开的新页面中添加按钮,功能是关闭当前页面 javascript:close()
- [Swift通天遁地]二、表格表单-(7)电子邮件Mail:实现单元格左右滑动调出功能按钮
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 富文本编辑器UEditor自定义工具栏(二、插入图片、音频、视频个性化功能按钮和弹层及自定义分页符)
导读:本篇将简单探讨插入图片.音频.视频的功能按钮实现方式 传送门:富文本编辑器UEditor自定义工具栏(一.基础配置与字体.背景色.行间距.超链接实现) 一.效果图 1.UEditor自定义工具栏 ...
- 小程序分享H5页面
1.在要分享的按钮上写一个跳转 <navigator url="../invite1/invite1"> <button class="invite_b ...
- 分享一下我封装iOS自定义控件的体会,附上三个好用的控件Demo <时间选择器&多行输入框&日期选择器>
前段时间有小伙伴问到我:"这样的控件该怎么做呢?",我感觉是个比较简单的控件,可能对于入行不久的同志思路没有很清晰吧.趁着最近工作不忙,就来这里分享一下我封装自定义控件的几点体会吧 ...
- 富文本编辑器UEditor自定义工具栏(三、自定义工具栏功能按钮图标及工具栏样式简单修改)
导读 富文本编辑器UEditor提供丰富了定制配置项,如果想设置个性化的工具栏按钮图标有无办法呢?答案是肯定的!前两篇博文简要介绍了通过将原工具栏隐藏,在自定义的外部按钮上,调用UEditor各命令实 ...
- 160229-01、web页面常用功能js实现
web页面常用功能js实现 1.网页未加载时弹出新窗口 <body onunload="window.open('http://www.a68.cn');">< ...
- vue html页面打印功能vue-print
vue项目中,HTML页面打印功能.在项目中,有时需要打印页面的表格, 在网上找了一个打印组件vue-print-nb 使用方式 安装 npm install vue-print-nb --save ...
随机推荐
- [Qt]自定义表头实现过滤功能
1. 写在前面 过滤功能源自项目上交互优化用户体验,在表头添加过滤符号实现过滤,替换以往在表格上方占用一行过滤项进行过滤. 2. 过滤提示 过滤提示就是三态图标(normal,hover,press) ...
- MyBatis从入门到精通(六):MyBatis动态Sql之if标签的用法
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解如何使用if标签生成动 ...
- [apue] 管道原子写入量的一个疑问
PIPE_BUF定义了管道可原子写入的数据量,在我的系统(CentOS 6.7)上这个值是4096,写了个程序验证了一下,通过三个维度来考察: N: 生产者数量 M:每个生产者的生产次数 P:每次写入 ...
- Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的
前言 用c#开发的时候,新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数,如Awake,Start, Update, OnDestroy等. 在相应的方法中实现游戏 ...
- HDU 6043:Colorful Tree(树上统计所有路径总颜色数)***
题目链接 题意 给出一棵有n个结点的树,每个结点有一个颜色,问在这棵树的所有路径中,每条路径的颜色数求和是多少. 思路 求每种颜色的贡献可以转化为总的和减去每种颜色在哪些路径上没有出现的贡献,一个颜色 ...
- HDU 1561:The more, The Better(有依赖的树型背包)
http://acm.hdu.edu.cn/showproblem.php?pid=1561 题意:有n个点,容量为m,每个点有一个价值,还给出n条边,代表选第i个点之前必须先选ai,问最多的价值能取 ...
- C++学习书籍推荐《C++编程思想第二版第一卷》下载
百度云及其他网盘下载地址:点我 编辑推荐 “经典原版书库”是响应教育部提出的使用原版国外教材的号召,为国内高校的计算机教学度身订造的.<C++编程思想>(英文版第2版)是书库中的一本,在广 ...
- Java学习笔记之---类和对象
Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
- springboot自动装配(2)---实现一个自定义自动装配组件
对于springboot个人认为它就是整合了各种组件,然后提供对应的自动装配和启动器(starter),基于这个流程去实现一个定义的装配组件 还是这张图 一.创建自己的自动配置工程, spring.f ...
- reportlab生成pdf
文档地址:https://www.reportlab.com/docs/reportlab-userguide.pdf 源码地址:https://bitbucket.org/rptlab/report ...