简体   繁体   中英

Updating navigation bar button item title outside of viewdidload

I am creating a navigation bar in viewDidLoad method with following code:

   let backButtonImage = UIImage(named: "backButton")
    normalButton = UIButton(frame: CGRect(x: 0, y: 0, width: backButtonImage!.size.width, height: backButtonImage!.size.height))
    normalButton.setImage(backButtonImage, for: .normal)

    normalButton.setTitleColor(.systemBlue, for: .normal)
    normalButton.contentHorizontalAlignment = .leading
    normalButton.contentVerticalAlignment = .center
    normalButton.titleEdgeInsets = UIEdgeInsets(top: 0, left: 0.0, bottom: 0.0, right: 0.0)

    let backBarButton = UIBarButtonItem(customView: normalButton)
    backBarButton.tintColor = .systemBlue


    item.leftBarButtonItems = [backBarButton]

    navigationBar.isTranslucent = false
    navigationBar.barTintColor = .white

    self.view.addSubview(navigationBar)
    navigationBar.translatesAutoresizingMaskIntoConstraints = false

    navigationBar.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    navigationBar.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    navigationBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true



    navigationBar.items = [item]
    navigationBar.delegate = self

But i want to update normalButton title when user touches an another button inside the view. I tried following code:

    if let letnavItem = navigationBar.items?[0],let bb = letnavItem.leftBarButtonItems?[0] {
        if let but = bb.customView, let but2 = but as? UIButton {
            print("counter: \(counter)")
            but2.setTitle("asd", for: .normal)
        }
    }

But it is not working. But if i run the second code in viewDidLoad method right after the navigationBar.delegate line, it is working well.

Why is it not working outside of the viewDidLoad ?

All above code is correct just you need to remove image from the button before setting off the button text like this:

but2.setImage(nil, for: .normal)
but2.setTitle("asd", for: .normal)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM