【发布时间】:2019-11-28 10:43:00
【问题描述】:
如何在 SwiftUI 中使用自定义滑动操作?
我尝试使用 UIKit 框架让这些在 SwiftUI 中工作。但这对我不起作用。
import SwiftUI
import UIKit
init() {
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let important = importantAction(at: indexPath)
return UISwipeActionsConfiguration(actions: [important])
}
func importantAction(at indexPath: IndexPath) -> UIContextualAction {
let action = UIContextualAction(style: .normal, title: "Important") { (action, view, completion) in
print("HI")
}
action.backgroundColor = UIColor(hue: 0.0861, saturation: 0.76, brightness: 0.94, alpha: 1.0) /* #f19938 */
action.image = UIImage(named: "pencil")
return action
}
}
struct TestView: View {
NavigationView {
List {
ForEach(appointmentsViewModel.appointments.identified(by: \.id)) { appointment in Row_Appointments(appointment: appointment)
}.onDelete(perform: delete)
}
}
}
}
【问题讨论】:
-
您的代码 - 按原样 - 不会构建。
init是某些东西的一部分,但是什么?此外,您究竟想做什么,“这对我不起作用”是什么意思?你是说UIViewControllerRepresentable不起作用吗?UIKit中的那些东西不起作用?也许您的onDelete正在拦截滑动操作?拜托,也许我们可以为您提供更多详细信息。 -
看起来 Max 想要在他的列表项中添加一个尾随滑动动作以将该项标记为“重要”。由于
tableView(_:trailingSwipeActionsConfigurationForRow:)是一个UITableViewDelegate方法,并且SwiftUI 不允许您为它作为实现细节创建的UITableView设置委托,因此Max 的尝试不太可能成功。 -
在 iOS 15 中,我们终于可以使用原生的 Swipe Actions - 请参阅 this answer。