我需要ViewController中的步进器从我的其他类手动更新。变量在我的第二课中更新,但步进器不会像他们想象的那样重置。我想我错误地打电话给我的代表。
ViewController:
class ViewController: UIViewController, CircleViewDelegate {
var colors = CircleView()
@IBOutlet weak var circleView1: CircleView!
@IBOutlet weak var redStepper: UIStepper!
@IBOutlet weak var redValue: UILabel!
@IBAction func stepperChange(sender: UIStepper) {
circleView1.redd1 = Int(redStepper.value);
redValue.text = Int(sender.value).description;
}
func updateRedStepperValue(value: Double) {
redStepper.value = value
redValue.text = Int(colors.redd1.value).description;
}
override func viewDidLoad() {
super.viewDidLoad()
let app = UIApplication.sharedApplication().delegate! as! AppDelegate
if let viewControllers = app.window?.rootViewController?.childViewControllers {
viewControllers.forEach { vc in
if let cont = vc as? CircleView {
cont.delegate = self
}
}
}
}
}
第二课程:
protocol CircleViewDelegate {
func updateRedStepperValue(value: Double)
func updateGreenStepperValue(value: Double)
func updateBlueStepperValue(value: Double)
}
class CircleView: UIView {
var delegate: CircleViewDelegate?
var redd1 = 0
func updateValues() {
if(redd1 == Int(red1)) {
redd1 = 0;
delegate?.updateRedStepperValue(0.0)//
}
}
}
答案 0 :(得分:1)
假设您已将CircleView
添加到视图控制器的视图中:
viewControllers.forEach { $0.view.subviews.forEach { ($0 as? CircleView)?.delegate = self } }
为了好玩。我不确定您正在做什么,但您似乎想要设置所有现有CircleView
的委托。有许多更好方法,而不是遍历所有视图控制器的视图。
<强>错误:强>
viewControllers.forEach { vc in
if let cont = vc as? CircleView {
cont.delegate = self
}
}
正如迈克尔在评论中指出的那样,vc
是一个视图控制器,而CircleView
是UIView
,导致您的委托永远不会被设置。
注意:此答案仅显示他做错了什么,并不表示如何做事。