Я добавил программный элемент кнопки панели, который будет изменять единицы измерения температуры для некоторых переменных между градусами Цельсия и Фаренгейта и установил его с помощью атрибутивного текста через customView.
Полужирный и наполовину стандартный текст. Какой бы блок ни был выбран, он будет выделен жирным шрифтом.
После попытки каждого метода их обновления я удалил бы их после того, как они не работали. Таким образом, в приведенном ниже коде «reload / refre sh» не предпринимается.
У меня есть логическое значение, которое изменяется при вызове действия. Однако я не могу получить barButtomItem для "Обновить / обновить sh" после выбора.
Я отладил и вызывается действие, переменная меняется, а форматированный текст изменяется, однако на экране он не меняется.
//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
}
Мне удалось заставить это работать в прошлом, когда я НЕ создавал кнопку программно, добавляя этот код в функцию при нажатии кнопки. Я не уверен, как это сделать программно. (отправитель вещи)
// 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()
}