I'm developing a Mastodon client in SwiftUI and I'd like to allow users to see a preview of a post from the context menu, as many other apps do.
I know I can achieve this in UIKit but I haven't seen how in SwiftUI.
Let's say, for example, that I've got two views: CompactView and ExpandedView.
CompactView is composed of an Image and a Text with a line limit of 2 so that every other line is hidden. ExpandedView is also composed of an Image and a Text, but the text's line limit is 20 so that all the post content is shown.
If the user force-touches on the CompactView, I'd like to show ExpandedView in the context menu instead of CompactView. How can I achieve this?
struct ContentView: some View {
var body: some View {
List(0 ..< 5) {
CompactView()
}
}
}
struct CompactView: some View {
var body: some View {
HStack {
Image("profile")
Text(/*Post content goes here*/)
.lineLimit(2)
}
.contextMenu {
Button("Report", action: {})
}
}
}
struct ExpandedView: some View {
var body: some View {
HStack {
Image("profile")
Text(/*Post content goes here*/)
.lineLimit(20)
}
}
}
My codebase isn't like this, but the approach would be the same I guess.
TL;DR: How can I show a different view when the user force-touches a view in SwiftUI?
Thanks in advance.