使用Swift和委托从子视图更新父视图上的标签

时间:2015-08-19 17:51:13

标签: ios swift delegates protocols

我正在尝试根据子视图中的buttonPressed事件(inputPopUp.swift)更新父视图中的标签(JL1EX3.swift)。我知道我需要实现代理/协议才能实现这一点,但是如何做到这一点却毫无头绪。这是我孩子视图中的代码:

weak var parentView: JL1EX3!
var char: String!
var buttonPressed = String()

//Setter 
func setChar(var thisChar: String){
    char = thisChar
}

//Getter
func getChar()-> String{
    if (buttonPressed == "addButton"){
        char = "+"
    }
    if (buttonPressed == "minusButton"){
        char = "-"
    }
    if (buttonPressed == "divideButton"){
        char = "/"
    }
    if (buttonPressed == "multiplyButton"){
        char = "*"
    }
    println(char)
    return char
}


@IBAction func addButtonPressed(sender: AnyObject) {
    buttonPressed = "addButton"
    setChar("+")
    getChar()
    self.parentView.tapLabel.text = getChar() //Does not work - returns nil
    self.removeAnimate()
}

非常感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

weak var parentView: JL1EX3!

不会分配父视图。所有这一行都声明了一个类JL1EX3的变量。它不会创建对类JL1EX3的任何特定实例的任何引用。

首先,我强烈建议您不要使用隐式展开。更好地声明您的父视图,如

weak var parentView: JL1EX3?

其次,确保分配parentView变量。初始化inputPopUp后,您应该这样做。

例如:

let myPopUp = inputPopUp()
myPopUp.parentView = self //this assigns the parentView. Otherwise it is nil

我希望这会有所帮助