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())
网友评论