You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将第一个Storyboard中ViewController的数据传递到第二个Storyboard的ViewController

实现步骤

1. 为第二个视图控制器定义接收属性

首先在第二个Storyboard对应的目标视图控制器类中,声明两个属性用来接收传递过来的学校名称和logo地址,同时提前定义好UI控件的IBOutlet:

import UIKit

class 你的第二个视图控制器类名: UIViewController {
    // 接收数据用的属性
    var receivedSchoolName: String?
    var receivedSchoolLogoUrl: String?
    
    // 展示用的UI控件IBOutlet
    @IBOutlet weak var schoolNameLabel: UILabel!
    @IBOutlet weak var schoolLogoImageView: UIImageView!
}

2. 配置Segue关联(如果使用Storyboard Segue跳转)

  1. 打开第一个Storyboard,按住ctrl键拖动首页按钮到第二个Storyboard的目标视图控制器,选择合适的跳转样式(例如Show、Present Modally)
  2. 选中生成的Segue连线,在右侧属性检查器中给Segue设置唯一标识,例如jumpToSecondVC

3. 在第一个视图控制器中实现prepareForSegue方法

在第一个视图控制器的类代码中添加如下方法,在Segue触发前完成数据传递:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // 校验当前触发的Segue是否是跳转到第二个页面的连线
    guard segue.identifier == "jumpToSecondVC",
          let targetVC = segue.destination as? 你的第二个视图控制器类名 else {
        return
    }
    // 传递当前页面的学校名称和logo地址
    targetVC.receivedSchoolName = schoolNameLabel.text
    targetVC.receivedSchoolLogoUrl = UserDefaults.standard.string(forKey: "schoolLogo")
}

4. 第二个视图控制器渲染接收的数据

在第二个视图控制器的viewDidLoad方法中,把接收到的数据赋值给对应UI控件:

override func viewDidLoad() {
    super.viewDidLoad()
    // 赋值学校名称
    schoolNameLabel.text = receivedSchoolName
    // 加载学校logo
    if let logoUrlStr = receivedSchoolLogoUrl, let logoUrl = URL(string: logoUrlStr) {
        schoolLogoImageView.sd_setImage(with: logoUrl, completed: nil)
    }
}

可选方案:代码触发跳转时的传值方式

如果你不需要用Segue,而是直接在按钮点击事件中用代码触发跳转,可以用如下方式实现:

// 首页按钮的点击事件
@IBAction func homeButtonClicked(_ sender: UIButton) {
    // 从第二个Storyboard中初始化目标视图控制器
    let secondSB = UIStoryboard(name: "第二个Storyboard的文件名", bundle: nil)
    guard let targetVC = secondSB.instantiateViewController(withIdentifier: "目标VC的Storyboard ID") as? 你的第二个视图控制器类名 else {
        return
    }
    // 传值
    targetVC.receivedSchoolName = schoolNameLabel.text
    targetVC.receivedSchoolLogoUrl = UserDefaults.standard.string(forKey: "schoolLogo")
    // 执行跳转,根据你的导航结构选择push或者present方式
    navigationController?.pushViewController(targetVC, animated: true)
    // 如果是模态跳转使用:present(targetVC, animated: true)
}

内容的提问来源于stack exchange,提问作者dextermikles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:36:04