Как подчеркнуть текст и цвет uibutton в iOS
У меня есть один простой запрос, мне нужно подчеркнуть текст и цвет UIButton. У меня есть текст строки для uibutton, но в отношении цвета оттенка он не работает. Я установил цвет оттенка от xib, его не берут оттуда. Ниже мой код.
NSMutableAttributedString *commentString = [[NSMutableAttributedString alloc] initWithString:@"Testing"];
[commentString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:NSMakeRange(0, [commentString length])];
[_helpWithLoginLabel setAttributedTitle:commentString forState:UIControlStateNormal];
Ответы
Ответ 1
Существует отдельный атрибут textColor (NSForegroundColorAttributeName
). Вот пример:
NSArray * keys = [[NSArray alloc] initWithObjects:NSForegroundColorAttributeName, NSUnderlineStyleAttributeName, nil];
NSArray * objects = [[NSArray alloc] initWithObjects:self.descriptionTextView.textColor, [NSNumber numberWithInt:NSUnderlineStyleSingle], nil];
NSDictionary * linkAttributes = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
self.descriptionTextView.linkTextAttributes = linkAttributes;
Надеюсь, что это поможет...
Ответ 2
В Swift:
let attributes = [NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]
let attributedText = NSAttributedString(string: button.currentTitle!, attributes: attributes)
button.titleLabel?.attributedText = attributedText
Ответ 3
Тот же ответ, что и @dequin с использованием литералов, получает более короткий синтаксис:
NSDictionary * linkAttributes = @{NSForegroundColorAttributeName:button.titleLabel.textColor, NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)};
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:button.titleLabel.text attributes:linkAttributes];
[button.titleLabel setAttributedText:attributedString];
Ответ 4
Основываясь на ответе Алфи, я придумал это решение:
NSArray * objects = [[NSArray alloc] initWithObjects:self.aButton.titleLabel.textColor, [NSNumber numberWithInt:NSUnderlineStyleSingle], nil];
NSArray * keys = [[NSArray alloc] initWithObjects:NSForegroundColorAttributeName, NSUnderlineStyleAttributeName, nil];
NSDictionary * linkAttributes = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self.aButton.titleLabel.text attributes:linkAttributes];
[self.aButton.titleLabel setAttributedText:attributedString];
Ответ 5
Попробуйте следующее: -
extension UIButton {
func UnderlineTextButton(title: String?, forState state: UIControlState)
{
self.setTitle(title, for: .normal)
self.setAttributedTitle(self.attributedString(), for: .normal)
}
private func attributedString() -> NSAttributedString? {
let attributes = [
NSFontAttributeName : UIFont.systemFont(ofSize: 12.0),
NSForegroundColorAttributeName : UIColor.black,
NSUnderlineStyleAttributeName : NSUnderlineStyle.styleSingle.rawValue
] as [String : Any]
let attributedString = NSAttributedString(string: self.currentTitle!, attributes: attributes)
return attributedString
}
}
Использование: -
button.UnderlineTextButton(title: "Click Here", forState:
UIControlState.normal)