在Swift中的一个ViewController视图之间传递数据

我所做的所有search都集中在视图控制器之间传递数据。 这不是我想要做的。 我有一个ViewController有多个视图。 ViewController有一个工作正常的滑块:

var throttleSetting = Float() @IBAction func changeThrottleSetting(sender: UISlider) { throttleSetting = sender.value } 

然后,在同一个ViewController中包含的一个视图中,我有一个基本的线(现在)设置一个初始值,稍后在代码的DrawRect部分使用:

 var RPMPointerAngle: CGFloat { var angle: CGFloat = 2.0 return angle } 

我想要做的是从ViewController的滑块的值传递给ViewController中包含的视图,以允许drawRect是dynamic的。

谢谢你的帮助!

编辑:对不起,当我创build这个答案我有ViewControllers记。 更简单的方法是在SomeView中创build一个方法并直接与之交谈。

例:

 class MainViewController: UIViewController { var view1: SomeView! var view2: SomeView! override func viewDidLoad() { super.viewDidLoad() // Create the views here view1 = SomeView() view2 = SomeView() view.addSubview(view1) view.addSubview(view2) } @IBAction func someAction(sender: UIButton) { view1.changeString("blabla") } } class SomeView: UIView { var someString: String? func changeString(someText: String) { someString = someText } } 

代表:

首先你创build一个协议:

 protocol NameOfDelegate: class { // ": class" isn't mandatory, but it is when you want to set the delegate property to weak func someFunction() // this function has to be implemented in your MainViewController so it can access the properties and other methods in there } 

在你的观点你必须添加:

 class SomeView: UIView, NameOfDelegate { // your code func someFunction() { // change your slider settings } } 

最后一步,您必须添加委托的属性,以便您可以“交谈”。 就我个人而言,我认为这个属性是两个阶级之间的某种关系,所以他们可以相互交谈。

 class MainViewController: UIViewController { weak var delegate: NameOfDelegate? @IBAction func button(sender: UIButton) { if delegate != nil { let someString = delegate.someFunction() } } } 

我在这里使用了一个button来显示如何使用委托。 只需将其replace为滑块即可更改视图的属性

编辑:我忘了提到的一件事是,你将不知何故需要分配SomeView作为委托。 但就像我说的,我不知道你是如何创build的意见等,所以我不能帮你。

在MVC模型中,视图不能直接相互通信。 总是有一个pipe理视图的视图控制器。 这些意见就像控制器小手。 所有的通信都通过视图控制器进行。

如果你想对某些视图做出反应,你可以设置一个IBAction 。 在该方法中,您可以更改您的其他视图,您可能有一个IBOutlet

所以在你的例子中,你可能有一个IBAction滑块改变它的价值(如你原来的问题),从中你可以设置一些公共属性的视图,你想改变。 如果需要的话,你也可以在目标视图上调用setNeedsDisplay()来重绘它自己。