是否可以实现在UILabel的文本属性更改时执行的IBAction?

时间:2015-07-06 03:52:50

标签: ios swift ibaction

希望这很简单。

我正在构建一个基本的计算器应用程序来学习iOS和Swift,并且我正在尝试为清除按钮实现代码。

按照标准,清除按钮(用基本UIButton实现)显示" AC"当显示已被清除(仅包含0),并显示" C"否则。

我实现这一点的第一个想法是使用一个IBAction,只要UILabel显示文本发生变化就会执行。显然,这不是已经为UILabel实施的行动。有没有其他方法来创建这个IBAction,还是我应该采取另一种方法?

3 个答案:

答案 0 :(得分:3)

使用KVO(键值观察)。

每当任何键(UILabel的文本属性)引用值发生更改时,都会生成通知。

对它有一个广泛的想法here

答案 1 :(得分:1)

IBAction基本上是将方法与您放在storyboard或xib上的控件事件相关联的简化方法。这只是将视图连接到控制器的一种方式(2或3中)。

你应该让计算器上的所有按钮调用相同的方法并将按下的按钮作为参数传递,例如(void)buttonPressed:(id)button然后检查按下的按钮以更改显示值并设置(A)C按钮因此。

答案 2 :(得分:0)

经过一些修修补补后,为我的问题找到了一个非常灵活的解决方案!

@IBOutlet weak var clearButton: UIButton!
@IBOutlet weak var display: UILabel! {
    didSet {
        if display.text == "0" {
            clearButton.setTitle("AC", forState: UIControlState.Normal)
        }
        else {
            clearButton.setTitle("C", forState: UIControlState.Normal)
        }
    }
}

唯一的问题是当标题为" C"时按下清除按钮时,它不会自动更改为" AC"。对于清除按钮,使用以下IBAction修复此问题:

@IBAction func clearTouchUpInside() {
    if clearButton.currentTitle == "AC" {
        calculator.clear()
    }
    display.text = "0"
    clearButton.setTitle("AC", forState: UIControlState.Normal)
}