iOS开发之Context Menus
时间:2022-07-22
本文章向大家介绍iOS开发之Context Menus,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
介绍
- WWDC 2019 推出了上下文菜单(Context Menus)成为 3DTouch 的替代品。
- 需要通过长按方式触发。
- 如果要启用上下文菜单,需要创建一个 UIContextMenuInteraction 并将其添加给某个触发的 UIView,然后指定 delegate,实现代理方法。
- 代理方法需要返回一个
UIContextMenuConfiguration
,其构造函数如下init(identifier: NSCopying?, previewProvider: UIContextMenuContentPreviewProvider?, actionProvider: UIContextMenuActionProvider? = nil)
,最主要是第三个参数,需要在其中创建UIMenu
。 - 案例
class ViewController: UIViewController {
// 需要打开User Interaction
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// 创建UIContextMenuInteraction
let interaction = UIContextMenuInteraction(delegate: self)
// 添加UIContextMenuInteraction
imageView.addInteraction(interaction)
}
}
// 代理方法
extension ViewController: UIContextMenuInteractionDelegate {
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
// 第一个菜单
let favorite = UIAction(title: "Favorite", image: UIImage(systemName: "heart.fill")) { action in
print("favorite")
}
// 第二个菜单
let share = UIAction(title: "Share", image: UIImage(systemName: "square.and.arrow.up.fill")) { action in
print("share")
}
// 第三个菜单
let delete = UIAction(title: "Delete", image: UIImage(systemName: "trash.fill"), attributes: [.destructive]) { action in
print("delete")
}
// 返回UIContextMenuConfiguration
return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in
UIMenu(title: "Actions", children: [favorite, share, delete])
}
}
}
- 效果
效果
UITableView和UICollectionView
iOS 13 以后,UITableView 和 UICollectionView 也支持 Context Menus,使用起来特别简单,只需要实现相应的代理方法,返回UIContextMenuConfiguration
即可。
- UITableView
func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
// 第一个
let favorite = UIAction(title: "Favorite", image: UIImage(systemName: "heart.fill")) { action in
print("favorite")
}
let share = UIAction(title: "Share", image: UIImage(systemName: "square.and.arrow.up.fill")) { action in
print("share")
}
let delete = UIAction(title: "Delete", image: UIImage(systemName: "trash.fill"), attributes: [.destructive]) { action in
print("delete")
}
return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in
UIMenu(title: "Actions", children: [favorite, share, delete])
}
}
- UICollectionView
func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
// 第一个
let favorite = UIAction(title: "Favorite", image: UIImage(systemName: "heart.fill")) { action in
print("favorite")
}
let share = UIAction(title: "Share", image: UIImage(systemName: "square.and.arrow.up.fill")) { action in
print("share")
}
let delete = UIAction(title: "Delete", image: UIImage(systemName: "trash.fill"), attributes: [.destructive]) { action in
print("delete")
}
return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in
UIMenu(title: "Actions", children: [favorite, share, delete])
}
}
- (八)高性能服务器架构设计总结4——以flamigo服务器代码为例
- SQL员工部门表综合查询60题
- 如何对Scala中集合(Collections)进行排序
- 小白教程——安装和使用PyCharm
- 如何在 Scala 中科学地操作 collection(一)集合类型与操作
- Redis 一二事(2) - 在spring中使用jedis 连接调试单机redis以及集群redis
- 用 Python 制作微信好友个性签名词云图
- 用 Python 查看微信好友位置信息
- 用 Python 分析微信好友性别比例
- FreeMarker静态模板结合spring展示
- 源码阅读之Vector
- 用 Python 实现聊天机器人
- 用 Python 实现雪花效果
- CentOS6.8_Spark单机部署
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Laravel多域名下字段验证的方法
- ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
- 简单了解如何封装自己的Python包
- python求解汉诺塔游戏
- Python第三方包PrettyTable安装及用法解析
- 如何让python的运行速度得到提升
- 在keras中对单一输入图像进行预测并返回预测结果操作
- python中数字是否为可变类型
- ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
- PHP示例演示发送邮件给某个邮箱
- PHP设计模式之观察者模式定义与用法分析
- PHP实现数组向任意位置插入,删除,替换数据操作示例
- 实例讲解Python 迭代器与生成器
- opencv 图像轮廓的实现示例
- 基于python实现可视化生成二维码工具