ios - 将数据从 Container View 不带 Segue 传递到 MainVC

标签 ios swift containers segue viewcontroller

想法是在按下容器 View (带有 ViewController)中的按钮后将值 trackNumber 发送到 Main ViewController 到 recivedTrackNumber 而无需 segue 因为它们在同一 View 中。如何通知主视图 Controller (recivedTrackNumber)关于 trackNumber 的值?

Container View(with ViewController) 看起来像带按钮的

 import UIKit
 class SelectSoundVC: UIViewController {

   var trackNumber: Int!

   @IBAction func winterSoundBut(_ sender: UIButton) {
    trackNumber = 1

  } 

}

和主视图 Controller

class MainVC: UIViewController {

   var recivedTrackNumber: Int!

}

Main.storyboard Screenshot

最佳答案

Delegate 模式应该对您有所帮助。首先,您需要委托(delegate)协议(protocol):

protocol SelectSoundVCDelegate {
    func didSelectTrackNumber(_ trackNumber: Int)
}

使用接受 trackNumber 值的函数。接下来,您需要在 SelectSoundVC 中创建 delegate 属性:

class SelectSoundVC: UIViewController {

    weak var delegate: SelectSoundVCDelegate?
    var trackNumber: Int!

    @IBAction func winterSoundBut(_ sender: UIButton) {
        trackNumber = 1
        delegate?.didSelectTrackNumber(trackNumber)
    } 

}  

这将调用 @IBAction 中的 didSelectTrackNumber。请注意,delegate 属性应该是 weak 以避免引用循环。最后一步,在 MainVC 中,您应该设置 SelectSoundVCdelegate 属性:

selectSoundVC.delegate = self  

这部分有点棘手,因为您需要 SelectSoundVC 的实例来设置委托(delegate)。可以在prepareFoSegue方法中设置,例如:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let viewController = segue.destination as? SelectSoundVC, segue.identifier == "SelectSoundVC" {
        viewController.delegate = self
    }
}

关于ios - 将数据从 Container View 不带 Segue 传递到 MainVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48239992/

相关文章:

ios - iOS 版 Google Places API 中的位置偏差

ios - iOS 中如何在按下按钮时显示图像?

ios - 未在自定义 UITableViewCell 中调用 UIView 的委托(delegate) didSet 属性

ios - Swift - 带有元组数组的字典

html - 在 CSS : How to make an absolute-positioned content display outside of its relative-positioned parent? 中定位

docker - Bazel:将运行文件包含在container_image中

ios - iOS 5中的错误“链接器命令失败,退出代码为1(使用-v查看调用)”是什么?

ios - 在 Objective C 中更改 SVProgessHud 的 BG 颜色

swift - 无法使 Realm List<T> 符合 NSCopying

C# 应用程序在 docker 中失败并显示 "cannot start service from the command line"但在主机上没有