SwiftUI NavgationLink实现不同页面的跳转

SwiftUI NavgationLink实现不同页面的跳转

最近有个业务需要,就是实现不同页面的跳转,而不是一味的跳转到固定的页面,那是老掉牙的套路,
在oc和swift里面,一般是通过判断section和indexPath的值,双重检验去跳转的,在SwiftUI 里面却有着不同的套路

import SwiftUI
struct MyLink: Identifiable{
    var id = UUID()
    let linkName: String
    //下面使用AnyView类型的擦除包装器
    let linkView: AnyView
}
struct NLinks{
    var links: [MyLink]
}

struct VLAPUIView: View {
    var nLinks = NLinks(links: [
        //下面创建对象是需要显式使用AnyView
        MyLink(linkName: "Stacks 和 Lazy Stacks", linkView: AnyView(StacksUIView())),
        MyLink(linkName: "Grids", linkView: AnyView(GridsUIView())),
        MyLink(linkName: "Displaying Data in Lists", linkView: AnyView(DataInListsUIView())),
        MyLink(linkName: "Lists and Scroll Views", linkView: AnyView(ListsAndScrollUIView())),
        MyLink(linkName: "Container Views(Form)", linkView: AnyView(CV_FormUIView())),
        MyLink(linkName: "Container Views(Group)", linkView: AnyView(CV_GroupUIView())),
        MyLink(linkName: "Container Views(GroupBox)", linkView: AnyView(CV_GroupBoxUIView())),
        MyLink(linkName: "Container Views(Section)", linkView: AnyView(CV_SectionUIView())),
        MyLink(linkName: "Hierarchical Views", linkView: AnyView(HierarchicalUIView())),
        MyLink(linkName: "Architectural Views", linkView: AnyView(ArchitecturalUIView())),
        MyLink(linkName: "Presentations", linkView: AnyView(PresentationsUIView()))
    ])
    
    var body: some View {
        List{
            ForEach(nLinks.links){link in
                NavigationLink(
                    destination: link.linkView,
                    label: {
                        Text(link.linkName)
                    })
            }
        }
        .navigationBarTitle(Text("View Layout And Pressentation"))
    }
}

struct VLAPUIView_Previews: PreviewProvider {
    static var previews: some View {
        VLAPUIView()
    }
}

禁用NavigationLink、Button默认点击高亮效果

struct StaticButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
}
}

然后在NavigationLink或Button上设置buttonStyle

.buttonStyle(StaticButtonStyle())

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容