我有一个在macOS上作为侧边栏的SwiftUI列表。对于它的项目,我已经添加了dropDesternation修饰符,就像这样:
.dropDestination(for: URL.self) { urls, _ in
for url in urls {
//... adding urls to destination
}
}
return true
} isTargeted: { inDropArea in
if inDropArea {
highlightedItem = item
} else {
highlightedItem = nil
}
}
默认情况下,如果光标在项目上方,则不会产生任何效果,但我希望获得与在AppKit中使用NSOutlineView相同的效果。以下是Finder中的示例:
如您所见,我在上面的代码中实现了highlightedItem
。我可以使用它来检查一个项目是否被选中并绘制背景:
.background {
if item == highlightedItem {
RoundedRectangle(cornerRadius: 5)
.fill(Color.blue)
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
但是看起来不太一样:
有趣的是,我想要的效果与使用侧边栏列表选择时得到的效果相同,例如:List(selection: $selectedItem)
必须有一种本地方法来做到这一点,这样我就不必虚构它并获得看起来不太正确的东西。