我有UIButton.在界面构建器中,我将其标题设置为'Attributed'.如何使其标题在Swift中的代码中加下划线?
@IBOutlet weak var myBtn: UIButton!
Run Code Online (Sandbox Code Playgroud)
我创建了一个在此按钮的touchUpInside事件上调用的函数:
var attributedString = NSMutableAttributedString(string:"new text")
var attrs = [
NSFontAttributeName : UIFont.systemFontOfSize(19.0),
NSForegroundColorAttributeName : UIColor.redColor()
]
var gString = NSMutableAttributedString(string:"g", attributes:attrs)
attributedString.appendAttributedString(gString)
myBtn.titleLabel?.attributedText = attributedString;
Run Code Online (Sandbox Code Playgroud)
但仍然没有结果.另外,我需要知道如何访问下划线属性.文字,大小和颜色保持不变.
A.K*_*ant 82
Swift 3/Xcode 8
@IBOutlet weak var myButton: UIButton!
let yourAttributes: [NSAttributedString.Key: Any] = [
.font: UIFont.systemFont(ofSize: 14),
.foregroundColor: UIColor.blue,
.underlineStyle: NSUnderlineStyle.single.rawValue]
//.double.rawValue, .thick.rawValue
override func viewDidLoad() {
super.viewDidLoad()
let attributeString = NSMutableAttributedString(string: "Your button text",
attributes: yourAttributes)
myButton.setAttributedTitle(attributeString, for: .normal)
}
Run Code Online (Sandbox Code Playgroud)
Swift 4/Xcode 9
@IBOutlet weak var myButton: UIButton!
let yourAttributes : [NSAttributedStringKey: Any] = [
NSAttributedStringKey.font : UIFont.systemFont(ofSize: 14),
NSAttributedStringKey.foregroundColor : UIColor.blue,
NSAttributedStringKey.underlineStyle : NSUnderlineStyle.styleSingle.rawValue]
//.styleDouble.rawValue, .styleThick.rawValue, .styleNone.rawValue
override func viewDidLoad() {
super.viewDidLoad()
let attributeString = NSMutableAttributedString(string: "Your button text",
attributes: yourAttributes)
myButton.setAttributedTitle(attributeString, for: .normal)
}
Run Code Online (Sandbox Code Playgroud)
36 *_*ign 80
在这里,你去试试吧.(至少在xCode 7 Beta中工作)
@IBOutlet weak var yourButton: UIButton!
var attrs = [
NSFontAttributeName : UIFont.systemFontOfSize(19.0),
NSForegroundColorAttributeName : UIColor.redColor(),
NSUnderlineStyleAttributeName : 1]
var attributedString = NSMutableAttributedString(string:"")
override func viewDidLoad() {
super.viewDidLoad()
let buttonTitleStr = NSMutableAttributedString(string:"My Button", attributes:attrs)
attributedString.appendAttributedString(buttonTitleStr)
yourButton.setAttributedTitle(attributedString, forState: .Normal)
}
Run Code Online (Sandbox Code Playgroud)
Shl*_*pel 22
如果你正在寻找一种没有继承的方法 -
// in swift 4 - switch NSUnderlineStyleAttributeName with NSAttributedStringKey.underlineStyle
extension UIButton {
func underline() {
guard let text = self.titleLabel?.text else { return }
let attributedString = NSMutableAttributedString(string: text)
//NSAttributedStringKey.foregroundColor : UIColor.blue
attributedString.addAttribute(NSAttributedString.Key.underlineColor, value: self.titleColor(for: .normal)!, range: NSRange(location: 0, length: text.count))
attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: self.titleColor(for: .normal)!, range: NSRange(location: 0, length: text.count))
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: text.count))
self.setAttributedTitle(attributedString, for: .normal)
}
}
extension UILabel {
func underline() {
if let textString = self.text {
let attributedString = NSMutableAttributedString(string: textString)
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: attributedString.length - 1))
attributedText = attributedString
}
}
}
Run Code Online (Sandbox Code Playgroud)
Glo*_*del 14
感谢发布您的代码,您根本不知道如何创建属性字符串.
这应该工作:
var attrs = [
NSFontAttributeName : UIFont.systemFontOfSize(19.0),
NSForegroundColorAttributeName : UIColor.redColor(),
NSUnderlineStyleAttributeName : NSUnderlineStyle.StyleSingle.rawValue
]
Run Code Online (Sandbox Code Playgroud)
Swift 4版本:
var attrs : [NSAttributedStringKey : Any] = [
NSAttributedStringKey.font : UIFont.systemFont(ofSize: 19.0),
NSAttributedStringKey.foregroundColor : UIColor.red,
NSAttributedStringKey.underlineStyle : NSUnderlineStyle.styleSingle.rawValue
]
Run Code Online (Sandbox Code Playgroud)
Max*_*hii 14
基于以前的一些答案,我决定创建一个可以轻松实现到您的应用程序中的课程
斯威夫特4
import UIKit
class UnderlineTextButton: UIButton {
override func setTitle(_ title: String?, for state: UIControlState) {
super.setTitle(title, for: .normal)
self.setAttributedTitle(self.attributedString(), for: .normal)
}
private func attributedString() -> NSAttributedString? {
let attributes : [NSAttributedStringKey : Any] = [
NSAttributedStringKey.font : UIFont.systemFont(ofSize: 19.0),
NSAttributedStringKey.foregroundColor : UIColor.red,
NSAttributedStringKey.underlineStyle : NSUnderlineStyle.styleSingle.rawValue
]
let attributedString = NSAttributedString(string: self.currentTitle!, attributes: attributes)
return attributedString
}
}
Run Code Online (Sandbox Code Playgroud)
从代码我这样称呼它
button.setTitle(author, for: .normal)
@shlomo-koppel 按钮标题答案的修改版本,如果您以编程方式设置/更改按钮标题,它将起作用(就像在我的例子中,我使用了本地化)
extension UIButton {
func underline() {
guard let text = self.currentTitle else { return }
let attributedString = NSMutableAttributedString(string: text)
attributedString.addAttribute(NSAttributedString.Key.underlineColor, value: self.titleColor(for: .normal)!, range: NSRange(location: 0, length: text.count))
attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: self.titleColor(for: .normal)!, range: NSRange(location: 0, length: text.count))
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: text.count))
self.setAttributedTitle(attributedString, for: .normal)
}
}
Run Code Online (Sandbox Code Playgroud)
@ShlomoKoppel回答Swift 4.2
extension UIButton {
func underline() {
guard let text = self.titleLabel?.text else { return }
let attributedString = NSMutableAttributedString(string: text)
//NSAttributedStringKey.foregroundColor : UIColor.blue
attributedString.addAttribute(NSAttributedString.Key.underlineColor, value: self.titleColor(for: .normal)!, range: NSRange(location: 0, length: text.count))
attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: self.titleColor(for: .normal)!, range: NSRange(location: 0, length: text.count))
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: text.count))
self.setAttributedTitle(attributedString, for: .normal)
}
}
extension UILabel {
func underlineMyText() {
if let textString = self.text {
let attributedString = NSMutableAttributedString(string: textString)
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: attributedString.length - 1))
attributedText = attributedString
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案。老实说,您可能需要不止一个地方,所以让我们创建一个扩展。这是 swift 5.0 干杯 :)
extension UIButton {
func underline() {
guard let title = self.titleLabel else { return }
guard let tittleText = title.text else { return }
let attributedString = NSMutableAttributedString(string: (tittleText))
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: (tittleText.count)))
self.setAttributedTitle(attributedString, for: .normal)
}
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它。
override func viewDidLoad() {
super.viewDidLoad()
button.underline()
}
Run Code Online (Sandbox Code Playgroud)
let attributes: [NSAttributedString.Key : Any] = [
NSAttributedString.Key.underlineStyle: 1,
NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13),
NSAttributedString.Key.foregroundColor: UIColor.systemGray3
]
let attributedString = NSMutableAttributedString(string: "Text here", attributes: attributes)
button.setAttributedTitle(NSAttributedString(attributedString: attributedString), for: .normal)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58100 次 |
| 最近记录: |