Ios 不同类中的Swift对象未更新
我需要在重置变量的同时将步进器和标签重置回0。问题是步进器和标签位于不同的类中,并且在变量重置时不会重置。我尝试使用委托(如果有人能向我展示最好的方式,那就太好了),而不是我的视图控制器的实例,但我什么都做不到。提前谢谢你的帮助 视图控制器: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
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”。让我知道会发生什么。今天我不是用电脑来测试它的,但是你可以和它比较一下