原文

通过按钮关联跳转

选中 Button ,然后点击 action 右边拖拽到 第二个页面

基于 Storyboard 多种方式的页面跳转、参数传递

选择 “Show”即可完成跳转关联。

基于 Storyboard 多种方式的页面跳转、参数传递

定义页面间 segue Id,通过代码触发跳转

选中第一个页面,点击manual右边拖拽到第二个页面

基于 Storyboard 多种方式的页面跳转、参数传递

选中 show即可关联两个页面

基于 Storyboard 多种方式的页面跳转、参数传递

点击中间的关联点,修改 Segue Id

基于 Storyboard 多种方式的页面跳转、参数传递

通过 Segue Id 跳转

@IBAction func onButtonClick(_ sender: Any) {
    self.performSegue(withIdentifier: "ToSecondView", sender: nil)
}

通过 Storyboard ID 跳转

设置第二个页面的 Storyboard ID
基于 Storyboard 多种方式的页面跳转、参数传递

通过 Storyboard 的文件名称和页面的 ID获取到ViewController,通过pushViewController跳转。

    @IBAction func onButtonClick(_ sender: Any) {
        let sb = UIStoryboard(name: "Moments", bundle:nil)
        let vc = sb.instantiateViewController(withIdentifier: "SecondView")
        self.navigationController?.pushViewController(vc, animated: true)
    }

传递参数

传输参数到第二个页面
class SecondViewController: UIViewController {
    var param:String = ""
    override func viewDidLoad() {
        super.viewDidLoad()
        print("param:\(param)")
    }
}

传输参数非常简单,只要覆盖 prepare 方法,在方法中设置参数即可。

class FirstViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if(segue.destination is SecondViewController){
            let vc = segue.destination as! SecondViewController
            vc.param = "Wiki"
        }
    }
}

运行结果:

param:Wiki

返回参数:第一种方式
class FirstViewController: UIViewController {
    var param:String = ""
    override func viewDidAppear(_ animated: Bool) {
        // 在这里处理返回值
        print("返回值:\(param)")
    }
    ...
}
class SecondViewController: UIViewController {
    ...
    @IBAction func onCloseClick(_ sender: Any) {
        let vc = self.navigationController?.viewControllers[(self.navigationController?.viewControllers.count)! - 2] as! FirstViewController
        vc.param = "收到啦"
        self.navigationController?.popViewController(animated: true)
    }
}

结果

返回值:收到啦

返回参数第二种方式:通过 NotificationCenter 返回值

定义监听器

override func viewDidLoad() {
    super.viewDidLoad()
    let notificationName = Notification.Name("UploadStatus")
    NotificationCenter.default.addObserver(self, selector: #selector(updateStatus), name: notificationName, object: nil)
}
@objc func updateStatus(notification: Notification){
    if(notification.object != nil){
        print("2上传状态:\(notification.object!)")
    }
    if(notification.userInfo != nil){
        print("2参数:\(notification.userInfo!)")
    }
}

发送通知

let notificationName = Notification.Name("UploadStatus")
NotificationCenter.default.post(name: notificationName, object: "上传失败")
NotificationCenter.default.post(name: notificationName, object: nil, userInfo: ["param1":"Wiki","param2":18])

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-16
  • 2021-10-18
  • 2021-05-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-28
  • 2021-11-20
  • 2021-10-13
  • 2021-05-20
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案