简体   繁体   English

iOS Swift SwiftUI - 单击潜台词后使用 NavigationLink

[英]iOS Swift SwiftUI - Use NavigationLink after clicking on subtext

I got this text:我得到了这个文本:

Text("Indem du fortfährst, stimmst du unseren  ") +
Text("Nutzungsbedingungen")
    .underline()
    .foregroundColor(Color("ClickableLink")) +
Text(" und unserer ") +
Text("Datenschutzerklärung")
    .underline()
    .foregroundColor(Color("ClickableLink")) +
Text(" zu")

I'd like to open a new view using NavigationLink after taping on Nutzungsbedingungen or Datenschutzerklärung , both need to open different views.NutzungsbedingungenDatenschutzerklärung后,我想使用NavigationLink打开一个新视图,两者都需要打开不同的视图。

I've seen those answers:我看过这些答案:

SwiftUI tappable subtext SwiftUI 可点击的潜台词

but those are either not what I need or trying them gives me errors and I don't know how to modify them since I'm absolutely new to swift/swiftui但这些要么不是我需要的,要么尝试它们会给我带来错误,我不知道如何修改它们,因为我对 swift/swiftui 完全陌生

Here are two possible approaches, one using the new NavigationStack with NavigationDestination and the other using popOver .这里有两种可能的方法,一种使用带有NavigationDestination的新NavigationStack ,另一种使用popOver

Both have the downside that you can't concatenate Text views within them.两者都有缺点,您无法在其中连接 Text 视图。 But you can still work with HStack/VStack to define the layout.但是您仍然可以使用 HStack/VStack 来定义布局。

enum Legals: Identifiable {
    case nutzungsbedingungen
    case datenschutzerklärung
    
    var id: Legals { self }
}

struct ContentView: View {
        
    @State private var selected: Legals?
    
    var body: some View {
        NavigationStack {
            
            // NavigationLink version
            VStack(alignment: .leading) {
                Text("Indem du fortfährst, stimmst du unseren")
                NavigationLink("Nutzungsbedingungen", value: Legals.nutzungsbedingungen)
                Text("und unserer")
                NavigationLink("Datenschutzerklärung", value: Legals.datenschutzerklärung)
                Text("zu")
            }
            .navigationDestination(for: Legals.self) { selection in
                switch selection {
                case .datenschutzerklärung:
                    Text("Datenschutzerklärung")
                case .nutzungsbedingungen:
                    Text("Nutzungsbedingungen")
                }
            }
            
            Divider()
            
            // popOver Version
            VStack(alignment: .leading) {
                Text("Indem du fortfährst, stimmst du unseren ")
                Text("Nutzungsbedingungen")
                    .underline()
                    .onTapGesture {
                        selected = .nutzungsbedingungen
                    }
                Text("und unserer ")
                Text("Datenschutzerklärung")
                    .underline()
                    .onTapGesture {
                        selected = .nutzungsbedingungen
                    }
                Text("zu")
            }
            .popover(item: $selected) { selected in
                switch selected {
                case .datenschutzerklärung:
                    Text("Datenschutzerklärung")
                case .nutzungsbedingungen:
                    Text("Nutzungsbedingungen")
                }
            }
        }
    }
}

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

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