Swift에서 단추 텍스트 밑줄 표시
UI 버튼이 있습니다.인터페이스 빌더에서 제목을 '속성'으로 설정했습니다.Swift의 코드에서 제목을 밑줄로 표시하려면 어떻게 해야 합니까?
@IBOutlet weak var myBtn: UIButton!
이 버튼의 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;
하지만 여전히 결과가 없습니다.또한 언더라인 속성에 액세스하는 방법도 알고 싶습니다.텍스트, 크기 및 색상은 동일하게 유지됩니다.
스위프트 5 / Xcode 12/13
@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)
}
스위프트 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)
}
스위프트 3 / Xcode 8
@IBOutlet weak var myButton: UIButton!
let yourAttributes: [String: Any] = [
NSFontAttributeName: UIFont.systemFont(ofSize: 14),
NSForegroundColorAttributeName: UIColor.white,
NSUnderlineStyleAttributeName: 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)
}
여기 있습니다. 방금 테스트했습니다. (적어도 xCode 7 베타에서 작동합니다.)
@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)
}
StoryBoard: StoryBoard의 텍스트에 밑줄을 긋는 경우.
- 버튼 또는 레이블 제목을 Attributed로 선택합니다.
- 밑줄을 그을 텍스트 범위를 선택합니다.
- 마우스 오른쪽 단추를 클릭하고 글꼴을 선택한 다음 밑줄을 선택합니다.
만약 당신이 상속 없이 이것을 할 방법을 찾고 있다면 -
빠른 3/4/5
// 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
}
}
}
몇 가지 이전 답변을 바탕으로 앱에 쉽게 구현할 수 있는 클래스를 만들기로 결정했습니다.
스위프트 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
}
}
코드에서 나는 그것을 그렇게 부릅니다.button.setTitle(author, for: .normal)
코드를 게시해 주셔서 감사합니다. 속성 문자열을 만드는 방법을 전혀 알고 있는지 확실하지 않았습니다.
이렇게 하면 됩니다.
var attrs = [
NSFontAttributeName : UIFont.systemFontOfSize(19.0),
NSForegroundColorAttributeName : UIColor.redColor(),
NSUnderlineStyleAttributeName : NSUnderlineStyle.StyleSingle.rawValue
]
Swift 4 버전:
var attrs : [NSAttributedStringKey : Any] = [
NSAttributedStringKey.font : UIFont.systemFont(ofSize: 19.0),
NSAttributedStringKey.foregroundColor : UIColor.red,
NSAttributedStringKey.underlineStyle : NSUnderlineStyle.styleSingle.rawValue
]
@슐로모 코펠이 대답합니다.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
}
}
}
이것은 스토리보드에서 완료되었습니다.(Xcode 9.1)
- 보기에서 Button 개체를 선택합니다.
- 글꼴 설정 열기
- 단일 밑줄 선택
- 텍스트를 입력하고 [Enter]를 누릅니다.
- 스위프트 5.2.4
- Xcode 11.5
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)
버튼 제목에 대한 @shlomo-kopel 답변의 수정 버전, 버튼 제목을 프로그래밍 방식으로 설정/변경하면 작동합니다(내 경우 현지화를 사용한 것처럼).
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)
}
}
이게 제 해결책입니다.그리고 솔직히 말해서, 여러분은 아마도 이것이 한 곳 이상 필요할 것입니다. 그러니 확장을 만들어 봅시다.이것은 빠른 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)
}
}
그리고 이렇게 사용할 수 있습니다.
override func viewDidLoad() {
super.viewDidLoad()
button.underline()
}
빠른 5를 위하여.
var attrs : [NSAttributedString.Key : Any] = [
NSAttributedString.Key.font : UIFont.systemFont(ofSize: 19.0),
NSAttributedString.Key.foregroundColor : UIColor.blue,
NSAttributedString.Key.underlineStyle : NSUnderlineStyle.styleSingle.rawValue
]
여기에 밑줄과 굵은 얼굴도 추가할 수 있습니다.swift 클래스 파일에 확장자를 추가하면 됩니다.
다음은 확장입니다(Swift 4 업데이트됨).
extension NSMutableAttributedString {
@discardableResult func bold(_ text:String) -> NSMutableAttributedString {
let attrs : [NSAttributedStringKey : Any] = [
NSAttributedStringKey.font : UIFont(name: "Montserrat-Bold", size: 12)!,
NSAttributedStringKey.foregroundColor : UIColor.white,
NSAttributedStringKey.underlineStyle : NSUnderlineStyle.styleSingle.rawValue]
let boldString = NSMutableAttributedString(string: text, attributes: attrs)
self.append(boldString)
return self
}
@discardableResult func normal(_ text:String)->NSMutableAttributedString {
let attrs : [NSAttributedStringKey : Any] = [
NSAttributedStringKey.font : UIFont(name: "Montserrat-Regular", size: 12)!,
NSAttributedStringKey.foregroundColor : UIColor.white
]
let normal = NSAttributedString(string: text, attributes:attrs)
self.append(normal)
return self
}
}
다음과 같이 사용할 수 있습니다.
let FormattedText = NSMutableAttributedString()
FormattedText
.normal("By signing in, you agree with our ")
.bold("Terms of Service")
yourLabel.attributedText = FormattedText
최선의 접근법은 아닐 수도 있지만, 저는 그것을 분리된 클래스와 함께 사용하고 오직 하나만 만들기 위한 예를 만들었습니다.one line
문자를 받기 위해 전화합니다.
제 수업은 다음과 같습니다.
import Foundation
import UIKit
enum AttributedTextsType {
case underlined
case bold
case boldUnderlined
}
class AttributedTexts {
private static func underlinedText(color: UIColor, size: CGFloat) -> [NSAttributedString.Key : Any] {
let attrs = [
NSAttributedString.Key.font : UIFont.systemFont(ofSize: size),
NSAttributedString.Key.foregroundColor : color,
NSAttributedString.Key.underlineStyle : 1] as [NSAttributedString.Key : Any]
return attrs
}
private static func getAttibute(type: AttributedTextsType, color: UIColor, size: CGFloat) -> [NSAttributedString.Key : Any] {
var attributes: [NSAttributedString.Key : Any]!
switch type {
case .underlined:
attributes = AttributedTexts.underlinedText(color: color, size: size)
break
case .bold:
attributes = AttributedTexts.underlinedText(color: color, size: size)
break
case .boldUnderlined:
attributes = AttributedTexts.underlinedText(color: color, size: size)
break
}
return attributes
}
static func set(string: String, color: UIColor, type: AttributedTextsType, size: CGFloat = 19.0) -> NSMutableAttributedString {
let attributes = getAttibute(type: type, color: color, size: size)
let attributedString = NSMutableAttributedString(string:"")
let buttonTitleStr = NSMutableAttributedString(string: string, attributes: attributes)
attributedString.append(buttonTitleStr)
return attributedString
}
}
사용.let attributedString = AttributedTexts.set(string: "Skip", color: .white, type: .underlined, size: 19.0)
안부 전합니다
언급URL : https://stackoverflow.com/questions/31357238/underline-button-text-in-swift
'programing' 카테고리의 다른 글
CSS 높이: 100% 대 높이: 자동 간의 차이 (0) | 2023.08.16 |
---|---|
구조물에 빈 포인터 캐스팅 (0) | 2023.08.16 |
CSS에서 너비 = 100% - 100%를 어떻게 할 수 있습니까? (0) | 2023.08.16 |
라라벨의 Mysql InnoDB 엔진 (0) | 2023.08.16 |
Application_Start 내에서 현재 애플리케이션 물리적 경로 가져오기 (0) | 2023.08.16 |