[英]SwiftUI: Link together with NavigationLink as list item
如何獲得一個列表,其中列表中的每個項目都包含一個Link
和一個NavigationLink
?
當在HStack
中將Link
和NavigationLink
彼此相鄰放置時,只要我點擊該行,它們都會被觸發。
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.