Обычно вы используете setTitle (: for:) , чтобы изменить текст на UIButton
.Но поскольку вы работаете с NSMutableAttributedString
, вам потребуется функция setAttributedTitle (: for:) .Я думаю, что это может быть то, что вы ищете:
myButton.setAttributedTitle(myNSMutableAttributedString, for: .normal)
Хедз-ап, хотя.Возможно, вам придется вызывать эту функцию для разных состояний управления, а не только для .normal
, иначе вы можете на мгновение увидеть другой текст, когда кнопка подсвечена. Здесь - это список состояний управления.
РЕДАКТИРОВАТЬ:
Я бы попытался ссылаться на отправителя в IBAction
вместо myButton
.Это может быть быстрое решение:
@IBAction func myButtonAction(_ sender: Any) {
let myAttributes = [NSAttributedString.Key.foregroundColor : UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0), NSAttributedString.Key.font : UIFont.systemFont(ofSize: 10 * fontConstant)]
let mutableAttributedString = NSMutableAttributedString(string: someRandomNumberDisplayedOnAUILabel, attributes: myAttributes)
guard let button = sender as? UIButton else {
print("Error: sender was not a button")
return
}
button.setAttributedTitle(mutableAttributedString, for: .normal)
button.backgroundColor = UIColor(red: 251/255.0, green: 251/255.0, blue: 251/255.0, alpha: 1.0)
}
РЕДАКТИРОВАТЬ # 2:
Если вы потеряете ссылку на ваш IBOutlet
, вы можете обойти это,назначив селектор кнопке до , вы потеряете ее.Попробуйте это:
override func viewDidLoad() {
super.viewDidLoad()
// Add the action to the button rather than holding on to the IBOutlet
myButton.addTarget(self, action: #selector(RideInProgressViewController.myAction(sender:)), for: .touchUpInside)
}
@objc private func myAction(sender: Any) {
guard let button = sender as? UIButton else {
print("Error: sender was not a button")
return
}
let myAttributes = [NSAttributedString.Key.foregroundColor : UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0), NSAttributedString.Key.font : UIFont.systemFont(ofSize: 10 * fontConstant)]
let mutableAttributedString = NSMutableAttributedString(string: someRandomNumberDisplayedOnAUILabel, attributes: myAttributes)
button.setAttributedTitle(mutableAttributedString, for: .normal)
button.backgroundColor = UIColor(red: 251/255.0, green: 251/255.0, blue: 251/255.0, alpha: 1.0)
}