2015-08-19 1 views
0

Я пытаюсь обновить метку в своем родительском представлении (JL1EX3.swift) на основе события buttonPressed из моего дочернего представления (inputPopUp.swift). Я знаю, что мне нужно реализовать делегаты/протоколы, чтобы это произошло, но я не знаю, как это сделать. Вот код в пределах моего детского вида:Обновить ярлык на родительском представлении из дочернего представления с помощью 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() 
} 

Ваша помощь будет очень признательна !!

+0

Где вы назначаете parentView? –

+0

Я думал, что назначил его на первой линии, нет? 'слабый var parentView: JL1EX3!' –

ответ

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 

Я надеюсь, что это помогает

Смежные вопросы