- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
SwiftUI自定义导航的方法实例
目录前言切换标签(tabs)控制导航堆栈小结
前言
默认情况下,SwiftUI提供的各种导航API在很大程度上是以用户直接输入为中心的也就是说,导航是在系统响应例如按钮的点击和标签切换等事件时由系统本身处理的。
然而,有时我们可能想更直接地控制应用程序的导航执行方式,尽管SwiftUI在这方面仍然不如UIKit或AppKit灵活,但它确实提供了相当多的方法,让我们在构建的视图中执行完全自定义的导航。
切换标签(tabs)
让我们先来看看我们如何能控制当前在??TabView???中显示的标签。通常情况下,当用户手动点击每个标签栏中的一个项目时,标签就会被切换,但是通过在一个给定的??TabView???中注入一个选择(??selection???)绑定,我们可以观察并控制当前显示的标签。在这里,我们要做的就是在两个标签之间切换,这两个标签是用整数??0???和??1??标记的:复制
structRootView:View{
??@StateprivatevaractiveTabIndex=0
??varbody:someView{
????TabView(selection:$activeTabIndex){
??????Button(SwitchtotabB){
????????activeTabIndex=1
??????}
??????.tag(0)
??????.tabItem{Label(TabA,systemImage:a.circle)}
??????Button(SwitchtotabA){
????????activeTabIndex=0
??????}
??????.tag(1)
??????.tabItem{Label(TabB,systemImage:b.circle)}
????}
??}
}
但真正好的地方是,在识别和切换标签时,我们并不仅仅局限于使用整数。相反,我们可以自由地使用任何??Hashable???值来表示每个标签例如通过使用一个枚举,其中包含我们想要显示的每个标签的情况。然后我们可以将这部分状态封装在一个??ObservableObject??中,这样我们就可以很容易地注入到我们的视图层次环境中:
enumTab{
??casehome
??casesearch
??casesettings
classTabController:ObservableObject{
??@PublishedvaractiveTab=Tab.home
??funcopen(_tab:Tab){
????activeTab=tab
??}
}
有了上述内容,我们现在可以用新的??Tab???类型来标记??TabView???中的每个视图,如果我们再把??TabController??注入到视图层次结构的环境中,那么其中的任何视图都可以随时切换显示的Tab。
structRootView:View{
??@StateObjectprivatevartabController=TabController()
??varbody:someView{
????TabView(selection:$tabController.activeTab){
??????HomeView()
????????.tag(Tab.home)
????????.tabItem{Label(Home,systemImage:house)}
??????SearchView()
????????.tag(Tab.search)
????????.tabItem{Label(Search,systemImage:magnifyingglass)}
??????SettingsView()
????????.tag(Tab.settings)
????????.tabItem{Label(Settings,systemImage:gearshape)}
????}
????.environmentObject(tabContro
文档评论(0)