Swiftui 当应用onLongPress修改器时,使用导航链接点击导航将被中断
我想做两件事。首先,如果我点击“TileCell”,我想导航到SpaceViewSwiftui 当应用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 )
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,则在选择时,会显示其他某些元素(而不是您选择的元素)的目标。