Ios 不同类中的Swift对象未更新

Ios 不同类中的Swift对象未更新,ios,swift,class,object,delegates,Ios,Swift,Class,Object,Delegates,我需要在重置变量的同时将步进器和标签重置回0。问题是步进器和标签位于不同的类中,并且在变量重置时不会重置。我尝试使用委托(如果有人能向我展示最好的方式,那就太好了),而不是我的视图控制器的实例,但我什么都做不到。提前谢谢你的帮助 视图控制器: class ViewController: UIViewController { var colors = CircleView() @IBOutlet weak var circleView1: CircleView! @IBOutlet weak

我需要在重置变量的同时将步进器和标签重置回0。问题是步进器和标签位于不同的类中,并且在变量重置时不会重置。我尝试使用委托(如果有人能向我展示最好的方式,那就太好了),而不是我的视图控制器的实例,但我什么都做不到。提前谢谢你的帮助

视图控制器:

class ViewController: UIViewController 
{
var colors = CircleView()

@IBOutlet weak var circleView1: CircleView!
@IBOutlet weak var blueStepper: UIStepper!
@IBOutlet weak var greenStepper: UIStepper!
@IBOutlet weak var redStepper: UIStepper!

@IBAction func stepperChange(sender: UIStepper)
{
    circleView1.redd1 = Int(redStepper.value);
    redValue.text = Int(sender.value).description;
}
@IBAction func stepperChange1(sender: UIStepper)
{
    circleView1.greenn1 = Int(greenStepper.value);
    greenValue.text = Int(sender.value).description;
}
@IBAction func stepperChange2(sender: UIStepper)
{
    circleView1.bluee1 = Int(blueStepper.value);
    blueValue.text = Int(sender.value).description;
}
}
UIView:

class CircleView: UIView 
{  
var colors1=ViewController()
func updateStepper
  {
    if(redd1==Int(red1)&&greenn1==Int(green1)&&bluee1==Int(blue1))
    {
        redd1=0;
        greenn1=0;
        bluee1=0;
        colors1.redStepper.value=0.0;//
        colors1.greenStepper.value=0.0;//
        colors1.blueStepper.value=0.0;//
    }
  }
}

我不太理解您的代码,比如CircleView中的“if”条件,以及方法“updateStepper”缺少参数。我假设您刚刚编写了一些“swift伪代码”,我将忽略其中的一些部分来解释如何为其实现委托。下面是一个示例代码:

import UIKit

protocol CircleViewDelegate: class {
    func updateStepper(view: CircleView)
}


class ViewController: UIViewController, CircleViewDelegate{

    @IBOutlet weak var circleView1: CircleView!
    @IBOutlet weak var blueStepper: UIStepper!
    @IBOutlet weak var greenStepper: UIStepper!
    @IBOutlet weak var redStepper: UIStepper!

    var circleViewDelegate: CircleView!

    override func viewDidLoad() {
        super.viewDidLoad()
        circleViewDelegate = circleView1
        circleViewDelegate!.delegate = self
    }

    func updateStepper(view: CircleView) {
        //code you want to execute when you call updateStepper() in the CircleView()
    }

}

class CircleView: UIView {

    weak var delegate: CircleViewDelegate?

    func updateStepper() {
        //whenever you want your viewController to updated other views based
        //on a condition inside an element like UIView, you can use a delegate
        //this way, your code is executed by the ViewController whenever you want
        delegate?.updateStepper(self)
    }

}
UIView中的回调必须设置为在需要时调用“UpdatesUpper”。不幸的是,根据你的问题,我不太明白什么时候该打电话


我希望这有帮助

我不太理解您的代码,比如CircleView中的“if”条件,方法“updateState”缺少参数。我假设您刚刚编写了一些“swift伪代码”,我将忽略其中的一些部分来解释如何为其实现委托。下面是一个示例代码:

import UIKit

protocol CircleViewDelegate: class {
    func updateStepper(view: CircleView)
}


class ViewController: UIViewController, CircleViewDelegate{

    @IBOutlet weak var circleView1: CircleView!
    @IBOutlet weak var blueStepper: UIStepper!
    @IBOutlet weak var greenStepper: UIStepper!
    @IBOutlet weak var redStepper: UIStepper!

    var circleViewDelegate: CircleView!

    override func viewDidLoad() {
        super.viewDidLoad()
        circleViewDelegate = circleView1
        circleViewDelegate!.delegate = self
    }

    func updateStepper(view: CircleView) {
        //code you want to execute when you call updateStepper() in the CircleView()
    }

}

class CircleView: UIView {

    weak var delegate: CircleViewDelegate?

    func updateStepper() {
        //whenever you want your viewController to updated other views based
        //on a condition inside an element like UIView, you can use a delegate
        //this way, your code is executed by the ViewController whenever you want
        delegate?.updateStepper(self)
    }

}
UIView中的回调必须设置为在需要时调用“UpdatesUpper”。不幸的是,根据你的问题,我不太明白什么时候该打电话


我希望这有帮助

您是否尝试过
NSNotification

如果总是将其重置为零,则在CircleView中创建一个不带If语句的func:

func resetStepper(not: NSNotification) {
  r1 = 0
  g1 = 0
  b1 = 0
  c1.rStep.value = 0.0
  c1.bStep.value = 0.0
  c1.gStep.value = 0.0
}
同样在CircleView的
createView功能中,添加:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "resetStepper:", name: "ResetStepper", object: nil)
然后在视图控制器中,发布来自调用它的按钮的通知

@IBAction func callReset(sender: AnyObject) {
  NSNotificationCenter.defaultCenter().postNotificationName("ResetStepper", anObject: nil)
}
这将发送CircleView正在侦听的通知以调用函数


希望对你有用

您是否尝试过
NSNotification

如果总是将其重置为零,则在CircleView中创建一个不带If语句的func:

func resetStepper(not: NSNotification) {
  r1 = 0
  g1 = 0
  b1 = 0
  c1.rStep.value = 0.0
  c1.bStep.value = 0.0
  c1.gStep.value = 0.0
}
同样在CircleView的
createView功能中,添加:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "resetStepper:", name: "ResetStepper", object: nil)
然后在视图控制器中,发布来自调用它的按钮的通知

@IBAction func callReset(sender: AnyObject) {
  NSNotificationCenter.defaultCenter().postNotificationName("ResetStepper", anObject: nil)
}
这将发送CircleView正在侦听的通知以调用函数


希望对你有用

在SO(或网络)上查找有关“代表”的问题/信息;这是一个典型的场景,您希望使用委托从
UIView
子类回调到视图控制器。您的代码不起作用有几个原因,但为了更好地回答,我需要您粘贴确切的代码,CircleView和ViewController缺少一些关于SO(或web)上“代表”的问题/信息的varsLook;这是一个典型的场景,您希望使用委托从
UIView
子类回调到视图控制器。您的代码不起作用有几个原因,但为了更好地回答,我需要您粘贴精确的代码,CircleView和ViewController缺少一些变量。有更好的方法可以实现这一点,NSNotification应在特殊情况下使用扫描您提供了更好的方法吗?我想学习。另外,NSNotification将使用哪些例外情况?有更好的方法来实现这一点,NSNotification应在例外情况下使用您提供了更好的方法吗?我想学习。另外,会使用哪些例外情况?我对这一行有问题。错误表示xc\u指令错误。CircleViewDeleteGate!。我想我忘了一行。。。在将委托设置为self之前,请尝试“circleViewDelegate=circleView1”。让我知道会发生什么。今天我没有用电脑来测试它,但是你可以把它和我的这条线比较一下。错误表示xc\u指令错误。CircleViewDeleteGate!。我想我忘了一行。。。在将委托设置为self之前,请尝试“circleViewDelegate=circleView1”。让我知道会发生什么。今天我不是用电脑来测试它的,但是你可以和它比较一下