【发布时间】:2023-01-02 23:53:56
【问题描述】:
我不确定这是否可能。我还是 SwiftUI 开发的新手。
所以这就是我想要完成的。
我正在使用拖放快速包,允许将项目从一个位置拖放到特定位置。
它使用 UUID 以便从一个位置(保持位置)拖动到另一个位置。
然而,我遇到的问题是,如果我只使用一个项目 IE 文本或图像,它就可以正常运行并相应地运行。
但是,我使用的网格具有多个从数据模型填充的项目。
// MARK: - Rune MODEL
struct Rune: Codable, Identifiable, Comparable {
static func < (lhs: Rune, rhs: Rune) -> Bool {
lhs.title < rhs.title
}
let runeid = UUID()
var id: Int
var title: String
var headline: String
var image: String
var pronunciation: String
var sound: String
var aett: String
var god: String
var knownas: [String]
var keywords: [String]
var translation: String
var magick: [String]
var gallery: [String]
var meanings: [String]
var runelore: [String]
var poeticedda: [String]
}
每个项目都有自己的 UUID,效果很好。
在视图中,我循环遍历从 JSON 文件填充的数据模型中的每个项目,一切都很好。
每个项目都显示在网格中。
LazyVGrid(columns: columns, spacing: 5) {
ForEach(runes) { rune in
RuneFrontView(rune: rune, width: width, height: height, degree: $frontDegree)
RuneBackView(rune: rune, width: width, height: height, degree: $backDegree)
switch rune.id {
case 1:
Text("rune 1")
// runeofday = rune.runeid
case 2:
Text("rune 2")
// runeofday = rune.runeid
case 3:
Text("rune 3")
// runeofday = rune.runeid
case 4:
Text("rune 4")
// runeofday = rune.runeid
case 5:
Text("rune 5")
// runeofday = rune.runeid
case 6:
Text("rune 6")
// runeofday = rune.runeid
default:
Text("rune default")
} //:END OF SWITCH
}.onTapGesture {
flipCard ()
}//: END OF ON TAP
}//: END OF LAZY V GRID
在我使用的拖放包中,它有 2 个视图,一个拖放(接收位置)和一个拖放(从网格中所有项目所在的位置)。
在拖放视图中,它需要一个与被拖入该拖放区的项目关联的 UUID。这也将允许我得到被丢弃的东西,以便我以后可以使用它。
DragView(**id: runeofday**) { dragInfo in
Text(dragInfo.isDragging ? "Im being dragged" : "Drag me 1")
.padding()
.background{
Color.mint
} //:END OF BACK GROUND
我已经声明了一个名为 runeofday 的变量,我需要能够使用已经根据该项目的 ID 分配给每个项目的 UUID 进行更新。
这意味着我有 6 个符文,每个符文都有一个名为 runeid 的 UUID,我想用 rune.runeid UUID 值更新 runeoftheday 变量,并将其提供给 DragView/drop 区域(必须是 UUID)。
如果有更好的方法来处理不使用这个包,我很乐意改变逻辑。
我的最终目标是创建一个拖放区,可以将项目拖入其中,我可以捕获拖放其中的内容以向下游填充数据。我使用的图像将显示为空白,在他们将图像放到拖放区后,他们可以点击该项目并将其翻转过来。
希望这是有道理的。
我尝试了不同的变量类型,但无法设置 runeofday 变量,然后将其更新为另一个 UUID。
【问题讨论】:
-
你能包括minimal reproducible example吗?很难看出您包含的两个示例在代码中实际上是如何连接的。
-
我想我现在想通了。我将视图移到 for 循环中,并且能够将数据模型中的 UUID 传递给另一个视图。
-
然后,您可以添加答案或删除问题。