如何在swift中更新我的实例变量?

时间:2016-01-28 22:19:31

标签: ios swift uiview uiviewcontroller

我希望在单击步进器时更改圆的颜色。我相信问题在于我正在使用该类的实例。

这是我的第一个档案:

  

类ViewController:UIViewController {

select *
from anothertable a join (
    select *, row_number() over (partition by targetid order by priority desc) rn
    from yourtable) t on a.id = t.targetid and t.rn = 1
     

}

这是我的第二个档案:

  

类UIView1:UIView {

@IBOutlet var redValue: UILabel!
@IBOutlet var greenValue: UILabel!
@IBOutlet var blueValue: UILabel!

@IBOutlet var redStepper: UIStepper!
@IBOutlet var greenStepper: UIStepper!
@IBOutlet var blueStepper: UIStepper!

var redd = 0.0;
var greenn = 0.0;
var bluee = 0.0;

@IBAction func redChange(sender: UIStepper)
{
    redValue.text = Int(sender.value).description;
    redd = sender.value;
}
@IBAction func greenChange(sender: UIStepper)
{
    greenValue.text = Int(sender.value).description;
    greenn = sender.value;
}
@IBAction func blueChange(sender: UIStepper)
{
    blueValue.text = Int(sender.value).description;
    bluee = sender.value;
}
     

}

2 个答案:

答案 0 :(得分:0)

可能存在各种连接问题,因为我们无法看到代码/ IB。但是,我怀疑你是否错过了通知视图需要重绘自己的调用,因为基础值已经改变。

self.view.setNeedsDisplay()

这是我以前用于实验的整个游乐场,代码中包含各种mod。检查最后一个副本以查看更改。注意:UI元素实际上并未创建,我在手动设置UIStepper.value后模拟了一个光泽。

import UIKit

class ViewController: UIViewController {

    @IBOutlet var redValue: UILabel!
    @IBOutlet var greenValue: UILabel!
    @IBOutlet var blueValue: UILabel!

    @IBOutlet var redStepper: UIStepper!
    @IBOutlet var greenStepper: UIStepper!
    @IBOutlet var blueStepper: UIStepper!

    var redd = 100.0;
    var greenn = 100.0;
    var bluee = 100.0;

    @IBAction func redChange(sender: UIStepper)
    {
        redValue?.text = Int(sender.value).description
        redd = sender.value
        self.view.setNeedsDisplay()
    }
    @IBAction func greenChange(sender: UIStepper)
    {
        greenValue.text = Int(sender.value).description
        greenn = sender.value
    }
    @IBAction func blueChange(sender: UIStepper)
    {
        blueValue.text = Int(sender.value).description
        bluee = sender.value
    }
}


class UIView1: UIView {

    var colors = ViewController()

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
    }

    override func drawRect(rect: CGRect)
    {
        let circle2 = UIView(frame: CGRect(x: -25.0, y: 10.0, width: 100.0, height:100.0))
        circle2.layer.cornerRadius = 50.0
        let startingColor2 = UIColor(red: CGFloat(colors.redd/255.0),
            green: (CGFloat(colors.greenn))/255,
            blue: (CGFloat(colors.bluee))/255,
            alpha: 1.0)
        circle2.backgroundColor = startingColor2;
        addSubview(circle2);    
    }
}

let v = UIView1(frame: CGRectMake(0,0,400, 240))
v.colors.view = v

let rstepper = UIStepper(frame: CGRectMake(0,0,300,50))
rstepper.maximumValue = 255.0
rstepper.value = 240.0
v.colors.redChange(rstepper)


// inspect the view now:
v

答案 1 :(得分:0)

是的,这确实是问题所在。

 var colors = ViewController()

创建一个与包含视图的视图控制器实例无关的新实例。在视图的drawrect代码中引用colors.redd没有到达活动视图控制器。

关系应该是另一个方向。您的视图控制器应该知道您的自定义视图的实例(通常通过插座),它应该设置您的视图的颜色属性,或者至少作为一种代理工作。