Swift 按后重新加载BarButtonItem(更改格式化字符串标题)

Swift 按后重新加载BarButtonItem(更改格式化字符串标题),swift,uinavigationbar,uibarbuttonitem,nsattributedstring,uinavigationitem,Swift,Uinavigationbar,Uibarbuttonitem,Nsattributedstring,Uinavigationitem,我以编程方式添加了一个条形按钮项,它可以在摄氏度和华氏度之间更改某些变量的温度单位,并通过customView使用属性文本对其进行设置 它是半粗体半标准文本。无论选择哪个单位,都将以粗体显示 在尝试了每一种刷新它们的方法后,我会在它们不起作用后删除它们。因此,在下面的代码中没有尝试“重新加载/刷新” 我有一个布尔值,它在调用操作时会发生变化。但是,我无法让barButtomItem在被选中时“重新加载/刷新” 我已经调试过,正在调用操作,变量正在更改,格式化文本正在更改,但是屏幕上的内容没有更

我以编程方式添加了一个条形按钮项,它可以在摄氏度和华氏度之间更改某些变量的温度单位,并通过customView使用属性文本对其进行设置

它是半粗体半标准文本。无论选择哪个单位,都将以粗体显示

在尝试了每一种刷新它们的方法后,我会在它们不起作用后删除它们。因此,在下面的代码中没有尝试“重新加载/刷新”

我有一个布尔值,它在调用操作时会发生变化。但是,我无法让barButtomItem在被选中时“重新加载/刷新”

我已经调试过,正在调用操作,变量正在更改,格式化文本正在更改,但是屏幕上的内容没有更改

//MARK: - Create Navigation Bar
func createNavBar() {

    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.backgroundColor = .clear
    navigationController?.navigationBar.isTranslucent = true

    let CFLabel = UILabel()
    CFLabel.attributedText = formatCFButton()
    CFLabel.sizeToFit()
    CFLabel.isUserInteractionEnabled = true
    let tap = UITapGestureRecognizer(target: self, action: #selector(CFChanger))
    CFLabel.addGestureRecognizer(tap)


    let CFButton = UIBarButtonItem.init(customView: CFLabel)
    let addCityButton = UIBarButtonItem.init(barButtonSystemItem: .add, target: self, action: #selector(addCity))
    addCityButton.tintColor = .black

    self.navigationItem.rightBarButtonItem = addCityButton
    self.navigationItem.leftBarButtonItem = CFButton

}
   @objc func CFChanger() {
    print("CF BUTTON PRESSED AND FUNCTION ACTIVATED!")
    isCelsius = !isCelsius
}


//Change font(bold) change temperature units button
func formatCFButton() -> NSMutableAttributedString {

    let changeTempString = NSMutableAttributedString()
    let boldAttribute = [NSAttributedString.Key.font: UIFont(name: "HelveticaNeue-Bold", size: 18.0)!]
    let regularAttribute = [NSAttributedString.Key.font: UIFont(name: "HelveticaNeue-Light", size: 18.0)!]

    if isCelsius == true {
        let boldText = NSAttributedString(string: "C ", attributes: boldAttribute)
        let regularText = NSAttributedString(string: "/ F", attributes: regularAttribute)
        changeTempString.append(boldText)
        changeTempString.append(regularText)
    } else {
        let boldText = NSAttributedString(string: "F ", attributes: boldAttribute)
        let regularText = NSAttributedString(string: "C / ", attributes: regularAttribute)
        changeTempString.append(regularText)
        changeTempString.append(boldText)
    }
    return changeTempString
}
在过去,我没有通过编程方式创建按钮,而是在按下按钮时将此代码添加到函数中,从而实现了这一点。我不知道如何通过编程来实现这一点。(寄件人资料)


我不明白。您正在单击doing
isCelsius=!伊塞尔修斯
。但是你在哪里重做按钮呢?我尝试了很多不同的方法,但都不管用,所以我在尝试了每一种方法后都把它们去掉了。所以现在什么都没有,你有没有建议尝试的方法?
// MARK: - Change units function
//****************************************************************************
@IBAction func changeUnitsButtonPressed(_ sender: UIButton) {
    isCelsius = !isCelsius
    var tempUnitNumber = 0
    if isCelsius == true {
        tempUnitNumber = 1
    } else {
        tempUnitNumber = 2
    }

    defaults.set(tempUnitNumber, forKey: "tempUnit")
    let changeTempString = formatCFButton()
    sender.setAttributedTitle(changeTempString, for: [])
    tableView.reloadData()
}