Swiftui 当应用onLongPress修改器时,使用导航链接点击导航将被中断

Swiftui 当应用onLongPress修改器时,使用导航链接点击导航将被中断,swiftui,navigation,gesture,Swiftui,Navigation,Gesture,我想做两件事。首先,如果我点击“TileCell”,我想导航到SpaceView NavigationLink(destination: SpaceView(space: space)) { TileCell( image: image, text: space.name!, detailText: nil, isFaded: space.isComplete )

我想做两件事。首先,如果我点击“TileCell”,我想导航到SpaceView

NavigationLink(destination: SpaceView(space: space)) {
        TileCell(
            image: image,
            text: space.name!,
            detailText: nil,
            isFaded: space.isComplete
        )
    }
    .buttonStyle(PlainButtonStyle())
}
这很有效

但我也想长按TileCell来触发一个不同的动作

NavigationLink(destination: SpaceView(space: space)) {
        TileCell(
            image: image,
            text: space.name!,
            detailText: nil,
            isFaded: space.isComplete
        )
        .onLongPressGesture {
            action()
        }
    }
    .buttonStyle(PlainButtonStyle())
}
长按手势有效,但我无法再通过点击导航到SpaceView


如果您能帮助这两项功能正常工作,我们将不胜感激。

我建议您在
ontapsignate
中使用isActive绑定手动触发NavigationLink。然后,您可以处理轻触和长按

struct ContentView: View {
    
    @State var outputText: String = ""
    @State var isActive : Bool = false
    var body: some View {
        NavigationView {
            NavigationLink(destination: SpaceView(), isActive: $isActive) { //<< here use isActive
                TileCell()
                    .onTapGesture {
                        isActive = true //<< activate navigation link manually
                    }
                    .onLongPressGesture {
                        print("Long press") //<< long press action here
                    }
            }
        }
    }
}
struct ContentView:View{
@状态变量outputText:String=“”
@状态变量isActive:Bool=false
var body:一些观点{
导航视图{
NavigationLink(destination:SpaceView(),isActive:$isActive){/在davidev的基础上,这里有一个版本可以与使用ForEach创建的多个NavigationLink一起使用

struct ContentView: View {
    @State var tileTextArray = ["Tile 1", "Tile 2", "Tile 3"]
    @State var isActiveArray = [false, false, false]
    
    var body: some View {
        NavigationView {
            ForEach(tileTextArray.indices, id: \.self) { index in
                NavigationLink(destination: SpaceView(), isActive: $isActiveArray[index]) { //<< here use isActive
                    TileCell()
                        .onTapGesture {
                            isActiveArray[index] = true //<< activate navigation link manually
                        }
                        .onLongPressGesture {
                            print("Long press") //<< long press action here
                        }
                }
            }
        }
    }
}
struct ContentView:View{
@状态变量tileTextArray=[“磁贴1”、“磁贴2”、“磁贴3”]
@状态变量isActivarray=[false,false,false]
var body:一些观点{
导航视图{
ForEach(tileTextArray.index,id:\.self){中的索引

NavigationLink(destination:SpaceView(),isActive:$isActive Array[index]){//这是否回答了您的问题?下一步可能会有所帮助。我发现这种方法存在一个问题。如果您为集合中的每个元素设置forEach并具有TileCell,则在选择时,会显示其他某些元素(而不是您选择的元素)的目标。