Swift:使用trailingSwipeActionsConfigurationForRowAt添加滑动操作图标是否可行?
解答:
trailingSwipeActionsConfigurationForRowAt完全支持添加图标 首先直接给结论:你听到的“无法实现”的说法并不属实,我们可以通过这个方法轻松给UITableView的滑动操作配置图标,下面是具体的实现方案和代码示例:
实现原理
UITableView的trailingSwipeActionsConfigurationForRowAt方法返回的UISwipeActionsConfiguration,是由多个UIContextualAction组成的——而UIContextualAction本身就支持设置image属性,这就是我们添加图标的核心入口。
完整代码示例
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { // 1. 创建带图标的删除操作 let deleteAction = UIContextualAction(style: .destructive, title: "删除") { [weak self] (_, _, completion) in // 这里写你的删除逻辑 self?.dataSource.remove(at: indexPath.row) tableView.deleteRows(at: [indexPath], with: .fade) completion(true) } // 设置图标(支持系统SF Symbols或自定义图片) deleteAction.image = UIImage(systemName: "trash.fill") deleteAction.backgroundColor = .systemRed // 2. 创建带图标的收藏操作 let favoriteAction = UIContextualAction(style: .normal, title: "收藏") { [weak self] (_, _, completion) in // 这里写你的收藏逻辑 self?.toggleFavoriteStatus(at: indexPath) tableView.reloadRows(at: [indexPath], with: .automatic) completion(true) } favoriteAction.image = UIImage(systemName: "star.fill") favoriteAction.backgroundColor = .systemYellow // 3. 组装并返回配置 let swipeConfig = UISwipeActionsConfiguration(actions: [deleteAction, favoriteAction]) // 可选:设置是否允许全屏滑动触发第一个操作 swipeConfig.performsFirstActionWithFullSwipe = true return swipeConfig }
小提示
- 如果只想要图标不需要文字,把
UIContextualAction的title设为nil即可 - 自定义图片建议用矢量格式(比如PDF),或者直接用苹果的SF Symbols,适配性更好
- 图标会自动适配滑动按钮的尺寸,不需要手动调整大小
这样就能实现带图标的滑动操作了,完全基于trailingSwipeActionsConfigurationForRowAt方法,所以之前的说法是错误的哦。
内容的提问来源于stack exchange,提问作者Ali Ihsan URAL
相关产品推荐
相关产品推荐

