想法是在按下容器 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!
}
最佳答案
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
中,您应该设置 SelectSoundVC
的 delegate
属性:
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/