簡體   English   中英

SwiftUI:與 NavigationLink 一起作為列表項鏈接

[英]SwiftUI: Link together with NavigationLink as list item

如何獲得一個列表,其中列表中的每個項目都包含一個Link和一個NavigationLink

當在HStack中將LinkNavigationLink彼此相鄰放置時,只要我點擊該行,它們都會被觸發。

struct ContentView: View {

    var body: some View {
        NavigationView {
            List {
                HStack {
                    Link(
                        "Link",
                        destination: URL(string: "https://www.apple.com")!
                    )
                    NavigationLink(
                        "Other View",
                        destination: Text("Hello from other view"))
                }
            }
        }
    }
}

結果表明 Apple 推薦的方法是明確設置Link按鈕的樣式。 例如

struct ContentView: View {

    var body: some View {
        NavigationView {
            List {
                HStack {
                    Link(
                        "Link",
                        destination: URL(string: "https://www.apple.com")!
                    )
                        .buttonStyle(.borderless) // <-- add this
                    NavigationLink(
                        "Other View",
                        destination: Text("Hello from other view"))
                }
            }
        }
    }
}

答案基於此處https://swiftui-lab.com/random-lessons/的優秀筆記。 真希望 Apple 能改進他們的 SwiftUI 文檔!

以前,它有效,但並不真正推薦通過將onTapGesture添加到顯式打開 URL 的Link來實現它的方法。在下面留下上下文。

struct ContentView: View {
   
    @Environment(\.openURL) private  var openURL
    let url = URL(string: "https://www.apple.com")
    var body: some View {
        NavigationView {
            List {
                HStack {
                    
                    Link(
                        "Link",
                        destination: url!
                    )
                    .onTapGesture {
                        print("Opening URL \(url)")
                        openURL(url!)
                    }
                    
                    NavigationLink(
                        "Other View",
                        destination: Text("Hello from other view")
                    )
                }
            }
        }
    }
}

根據 shufflingb 的回答:

用不可點擊的元素替換鏈接並向其添加手勢處理程序。

struct ContentView: View {

    @Environment(\.openURL) private  var openURL
    let url = URL(string: "https://www.apple.com")

    var body: some View {
        NavigationView {
            List {
                HStack {

                    Text("Link")
                        .foregroundColor(.accentColor)
                        .onTapGesture {
                            openURL(url!)
                        }

                    NavigationLink(
                        "Other View",
                        destination: Text("Hello from other view")
                    )
                }
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM