簡體   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