SwiftUI NavgationLink實(shí)現(xiàn)不同頁(yè)面的跳轉(zhuǎn)
最近有個(gè)業(yè)務(wù)需要,就是實(shí)現(xiàn)不同頁(yè)面的跳轉(zhuǎn)活翩,而不是一味的跳轉(zhuǎn)到固定的頁(yè)面畜埋,那是老掉牙的套路,
在oc和swift里面,一般是通過(guò)判斷section和indexPath的值诗鸭,雙重檢驗(yàn)去跳轉(zhuǎn)的商叹,在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: [
//下面創(chuàng)建對(duì)象是需要顯式使用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默認(rèn)點(diǎn)擊高亮效果
struct StaticButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
}
}
然后在NavigationLink或Button上設(shè)置buttonStyle
.buttonStyle(StaticButtonStyle())