SwiftUI NavgationLink实现不同页面的跳转

2022-04-27  本文已影响0人  Johnson_9d92

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())

上一篇 下一篇

猜你喜欢

热点阅读