SwiftUI 实现页面跳转的几种方式

本文介绍了在SwiftUI中进行页面跳转的两种方法:官方提供的NavigationView结合NavigationLink,以及自定义跳转方法。官方方式在跳转后自动添加返回按钮,但灵活性不足;自定义方法则提供了更多灵活性,但需要手动处理返回操作。通过示例代码详细展示了这两种方式的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不管是什么系统,页面跳转都是必须的
本文总结了个人在学习SwiftUI中遇到的几种页面跳转实现方式

  1. 使用官方提供的NavigationView

官方提供的方式可以在跳转页面后,自动添加返回按钮
但官方的方式个人觉得很不灵活

第一个画面(即将跳出的画面)

struct PersonUIView: View {
    var body: some View {
        NavigationView(content: {
            NavigationLink(
                destination: PersonSecondUIView(),
                label: {
                    MyCustomTitleText(text: "点我跳转到第二个画面")
                })
        })
        .navigationBarTitle(Text("Person"),displayMode: .inline)
    }
}
struct PersonUIView_Previews: PreviewProvider {
    static var previews: some View {
        PersonUIView()
    }
}

第二个画面(即将跳入的画面)

struct PersonSecondUIView: View {
    var body: some View {
        Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
    }
}
struct PersonSecondUIView_Previews: PreviewProvider {
    static var previews: some View {
        PersonSecondUIView()
    }
}
  1. 直接自定义跳转方法

用法灵活,但挑战后要想返回原画面需要自己添加方法

import SwiftUI

struct NotifyUIView: View {
    var body: some View {
        NavigationView{
            ScrollView(.vertical, showsIndicators: true, content: {
                VStack(alignment: .leading, content: {
                    Button(action: goToHomeSecond, label: {
                        Text("不使用NavigationLink页面跳转")
                    })
                    Spacer()
                })
            })
        }
    }
    func goToHomeSecond(){
        if let window = UIApplication.shared.windows.first
        {
            window.rootViewController = UIHostingController(rootView: HomeSecondUIView())
            window.makeKeyAndVisible()
        }
    }
}
struct NotifyUIView_Previews: PreviewProvider {
    static var previews: some View {
        NotifyUIView()
    }
}

//返回
@Environment(\.presentationMode) var presentationMode
Button("Dismiss") {
    self.presentationMode.wrappedValue.dismiss()
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值