alexsmith
alexsmith

Reputation: 219

UILabel don't change its value

I'm making simple exercise from App Development with Swift: Navigation and Workflows textbook, but don't understand why this code doesn't work and label text doesn't change:

import UIKit

class MiddleViewController: UIViewController {

    @IBOutlet var happened: UILabel!
    var eventNumber = 1

    override func viewDidLoad() {
        super.viewDidLoad()

        if let existingText = happened.text {
            happened.text = "\(existingText) \n Event number \(eventNumber) was viewDidLoad"
            eventNumber += 1
        }
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if let existingText = happened.text {
            happened.text = "\(existingText) 1"
            eventNumber += 1
        }

    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        if let existingText = happened.text {
            happened.text = "\(existingText)\nEvent number \(eventNumber) was viewDidAppear"
            eventNumber += 1
        }

    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        if let existingText = happened.text {
            happened.text = "\(existingText)\nEvent number \(eventNumber) was viewWillDisappear"
            eventNumber += 1
        }

    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        if let existingText = happened.text {
            happened.text = "\(existingText)\nEvent number \(eventNumber) was viewDidDisappear"
            eventNumber += 1
        }

    }

}

Event if I switch view controllers, label text doesn't change.

Upvotes: 0

Views: 38

Answers (2)

maks_b
maks_b

Reputation: 31

You need to add

happened.numberOfLines = 0

in your viewDidLoad(). That will ensure that UILabel can have multiple lines of text.

The code in viewDidLoad():

override func viewDidLoad() {
    super.viewDidLoad()

    happened.numberOfLines = 0

    if let existingText = happened.text {
        happened.text = "\(existingText) \n Event number \(eventNumber) was viewDidLoad"
        eventNumber += 1
    }
}

Upvotes: 0

Dhara Patel
Dhara Patel

Reputation: 506

"(existingText)\nEvent number (eventNumber) was viewWillDisappear"

Because in above text you have used "\n" , so it display text in next line of label.Please check numberOfLines of your label. If its 1 then it will not display because text is in second line

Upvotes: 1

Related Questions