drag-and-drop - SwiftUI .onDrag 在表单中的项目上使所有表单可拖动
问题描述
我做了一个简单的胶囊文本项目拖放到文本区域。目标文本值将删除的项目作为文本获取,并且更改为值。
以下代码可以正常工作,我相信它对想要执行拖放操作的初学者很有用。
我遇到的问题是,当可拖动项目包含在表单中时,会拖动所有表单,而不是仅拖动所选项目。
要复制它,只需取消注释表单 { }
我错过了什么还是真的是一个错误。
import SwiftUI
import UniformTypeIdentifiers
struct DragView: View {
var body: some View {
//Form{
HStack{
DropText()
VStack{
ForEach((1...10).reversed(), id: \.self) {
CapsuleText(text: "Test \($0)")
}
}
}
// }
}
}
struct DropText: View {
@State var myText: String = "Glisser ici"
@State var targeted: Bool = false
@State private var onDrag = false
var body: some View {
VStack{Text(myText)}
.font(.footnote)
.padding()
.foregroundColor(.white)
.background(targeted ? Color.red : Color.green)
.clipShape(Capsule())
.onDrop(of: [UTType.text], delegate: DragRelocateDelegate(dropText: $myText, onDrag: $onDrag))
}
}
struct CapsuleText: View {
var text: String
@State private var onDrag = false
var body: some View {
VStack{Text(text)}
.font(.footnote)
.padding()
.foregroundColor(.white)
.background(onDrag ? Color.gray : Color.blue)
.clipShape(Capsule())
.onDrag {
self.onDrag = true
return NSItemProvider(object: String(text) as NSString)
}
}
}
struct DragRelocateDelegate: DropDelegate {
@Binding var dropText: String
@Binding var onDrag: Bool
func dropEntered(info: DropInfo) {
}
func dropUpdated(info: DropInfo) -> DropProposal? {
return DropProposal(operation: .move)
}
func performDrop(info: DropInfo) -> Bool {
guard info.hasItemsConforming(to: [UTType.text]) else {
return false
}
let items = info.itemProviders(for: [UTType.text])
for item in items {
_ = item.loadObject(ofClass: String.self) { str, _ in
if let str = str {
dropText = str
}
}
}
return true
}
}
解决方案
推荐阅读
- google-apps-script - 在 5 分钟 goolge 脚本后执行一个函数
- javascript - useState 不会在函数内部更新(即使在它完成运行之后),但会在函数外部更新
- python - Discord.py-经济系统
- javascript - 如何在自定义上下文右键菜单中从网页上的段落复制文本
- sql - 物料清单的 SQL 查询以获取组件的级别
- python - python的reguar表达式中的贪婪反向引用?
- c# - Unchase OpenAPI (Swagger) Connected Service:请求的参数设置为字典
安装字典 - nginx - nginx – 从 URL 计算的子目录中提供文件
- powershell - Powershell`Get-Clipboard`的编码问题
- python - 即使我单击一次,AJAX 也会多次调用