NavigationLink запускается из любой точки зрения - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь открыть новое представление по нажатию на значок речевого пузыря. В настоящее время новое представление запускается правильно, но я могу щелкнуть в любом месте тела моего PostView, и NavigationLink будет запущено. Я не могу получить новый вид, который будет активирован только при нажатии на значок речевого пузыря.

В дополнение к этому я не могу заставить серую стрелку исчезнуть.

PostView

struct PostView: View {
    var post: Post
    @State var postComment: String
    @State var showPlaylistsView = false
    @State var action: String? = ""
    @EnvironmentObject var viewHandler: ViewHandler


    var body: some View {
        VStack {
            HStack {
                Text(post.songInfo.album).font(.title)
                Spacer()
                Text(post.songInfo.artist)
            }.padding()

            URLImage(url: post.songInfo.albumArtURL)
                .aspectRatio(contentMode: .fit)

            NavigationLink(destination: Text(self.post.songInfo.track), tag: post.id, selection: self.$action) {
                EmptyView()
            }

            HStack {
                Spacer()
                Image("comment-icon")
                    .onTapGesture {
                        self.action = self.post.id
                }
                Spacer()
            }


            HStack {
                Text(post.user.userName)
                Spacer()
            }.padding()

            HStack {
                Text(post.textContent)
                Spacer()
            }.padding()


        }
    }



}

PostsView

struct PostsView: View {
    @ObservedObject var fbVM = FirebasePosts()
    @State private var action: Int? = 0

    var body: some View {
        NavigationView {
            List {
                ForEach(fbVM.visiblePosts) { post in
                    PostView(post: post, postComment: "")
                }.listRowInsets(EdgeInsets())

            }
        }
    }
}

Как указано выше, серая стрелка все еще присутствует, и нажатие в любом месте сообщения вызовет NavigationLink. На изображении ниже вы можете увидеть весь пост, выделенный серым цветом. Это происходит независимо от того, где вы нажимаете в PostView.

Example

1 Ответ

0 голосов
/ 07 ноября 2019

Протестировано с Xcode 11.2, Swift 5.1

Подсветка и стрелка - это стиль NavigationLink в списке. Так что вам просто нужно использовать ScrollView вместо List, чтобы представить свой контент и переместить изображение комментария в NavigationLink, так что оно будет активировано только при нажатии на него. В ScrollView NavigationLink не имеет стрелки и строка не будет подсвечена. Аналогичное сделано в приведенном ниже примере

non-highlighted row with navigation

import SwiftUI
import Combine

struct ContentView: View {
    @State private var objects = ["1", "2", "3"]

    var body: some View {
        NavigationView {
            ScrollView {
                ForEach(objects, id: \.self) { object in
                    VStack {
                        Text("Row \(object)").padding().background(Color.yellow)
                        Spacer()
                        NavigationLink(destination: Text("Details")) {
                            Image(systemName: "bubble.right")
                        }
                        Divider()
                    }
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
...