繁体   English   中英

NavigationLink + Text.onTapGesture 碰撞

[英]NavigationLink + Text.onTapGesture Colliding

这个问题是,当单击 NavigationLink 视图中的文本时,onTapGesture 获得优先级并忽略 NavigationLink。 我已经尝试过simultaneousGesture ,但仍然遇到问题。

这是 NavigationView/List/NavigationLink 的代码:

NavigationView {
            List {
                ForEach(gameStore.games) { game in                    
                    NavigationLink(destination: EmojiMemoryGameView(viewModel: game)
                                    .navigationBarTitle(self.gameStore.name(for: game))
                    ) {
                        EmojiThemeEditorView(game: game, isEditing: self.editMode.isEditing)
                    }                    
                }
                .onDelete { indexSet in
                    indexSet.map { self.gameStore.games[$0] }
                        .forEach { game in
                            self.gameStore.removeGameTheme(game)
                        }
                }
            }
            .navigationBarTitle(self.gameStore.name)
            .navigationBarItems(
                leading: Button(action: {
                    self.gameStore.addGameTheme()
                }, label: {
                    Image(systemName: "plus").imageScale(.large)
                }),
                trailing: EditButton()
            )
            .environment(\.editMode, $editMode)

这是EmojiThemeEditorView的正文:

var body: some View {
        Text(game.theme.themeName).foregroundColor(game.theme.colorToUse).font(.largeTitle)
//            .simultaneousGesture(TapGesture().onEnded { // tried this and did not work
            .onTapGesture {
                if (isEditing) {
                    self.showThemeEditor = true
                }
            }
            .popover(isPresented: $showThemeEditor) {
                EmojiThemeEditorOptionView(isShowing: $showThemeEditor).environmentObject(self.game.theme)
            }
    }

基本上,单击文本不会转换到 NavigationLink。 这是一个例子:

在此处输入图像描述

有关解决此问题的最佳方法的任何想法?

我也遇到过类似的导航链接不稳定的问题。 我在处理导航链接方面取得了最大的成功,就好像它们不应该出现在列表中 go 并依靠 isActive 标志来触发它们。

这是一个关于如何使用 isActive 的好教程:

https://www.hackingwithswift.com/articles/216/complete-guide-to-navigationview-in-swiftui

我怀疑将您的 navigationLinks 更改为按钮,在您的视图中创建一个 NavigationLink,并让您的 onTapGesture 为游戏更改 state object 并为 isActive 更改 Bool 将起作用。 这是一个奇怪的范例,与 html 链接非常不同。

关键是

var body: some View {
@State var emojiView = false
    NavigationLink(“”, destination: EmojiMemoryGameView(viewModel: game), isActive: self.$emojiView)

如果您更改 onTapGesture 中的 self.emojiView 和同一位置的游戏变量,它应该会将您导航到链接。 希望这是有道理的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM