UILabel
स्विफ्ट में अंडरलाइन कैसे करें ? मैंने ऑब्जेक्टिव-सी खोजा, लेकिन स्विफ्ट में काम करने के लिए उन्हें बहुत कुछ नहीं मिला।
UILabel
स्विफ्ट में अंडरलाइन कैसे करें ? मैंने ऑब्जेक्टिव-सी खोजा, लेकिन स्विफ्ट में काम करने के लिए उन्हें बहुत कुछ नहीं मिला।
जवाबों:
आप NSAttributedString का उपयोग करके ऐसा कर सकते हैं
उदाहरण:
let underlineAttribute = [NSAttributedString.Key.underlineStyle: NSUnderlineStyle.thick.rawValue]
let underlineAttributedString = NSAttributedString(string: "StringWithUnderLine", attributes: underlineAttribute)
myLabel.attributedText = underlineAttributedString
संपादित करें
एक यूआईबेल के सभी पाठों के लिए समान विशेषताएँ होने के लिए, मैं आपको यूआईबेल को उप-पाठ करने और पाठ को ओवरराइड करने का सुझाव देता हूं, जैसे:
स्विफ्ट 4.2
class UnderlinedLabel: UILabel {
override var text: String? {
didSet {
guard let text = text else { return }
let textRange = NSMakeRange(0, text.count)
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSAttributedString.Key.underlineStyle , value: NSUnderlineStyle.single.rawValue, range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
}
}
}
स्विफ्ट 3.0
class UnderlinedLabel: UILabel {
override var text: String? {
didSet {
guard let text = text else { return }
let textRange = NSMakeRange(0, text.characters.count)
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSUnderlineStyleAttributeName , value: NSUnderlineStyle.styleSingle.rawValue, range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
}
}
}
और आपने अपना पाठ इस तरह रखा:
@IBOutlet weak var label: UnderlinedLabel!
override func viewDidLoad() {
super.viewDidLoad()
label.text = "StringWithUnderLine"
}
पुराना:
स्विफ्ट (2.0 से 2.3):
class UnderlinedLabel: UILabel {
override var text: String? {
didSet {
guard let text = text else { return }
let textRange = NSMakeRange(0, text.characters.count)
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSUnderlineStyleAttributeName, value:NSUnderlineStyle.StyleSingle.rawValue, range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
}
}
}
स्विफ्ट 1.2:
class UnderlinedLabel: UILabel {
override var text: String! {
didSet {
let textRange = NSMakeRange(0, count(text))
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSUnderlineStyleAttributeName, value:NSUnderlineStyle.StyleSingle.rawValue, range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
}
}
}
UTF16
चरित्र पाठ के स्थान पर आपको गिनती करनी चाहिए जब आप अपना टेक्स्ट रेंगते हैंNSRange
स्विफ्ट 5 और 4.2 एक लाइनर:
label.attributedText = NSAttributedString(string: "Text", attributes:
[.underlineStyle: NSUnderlineStyle.single.rawValue])
स्विफ्ट 4 एक लाइनर:
label.attributedText = NSAttributedString(string: "Text", attributes:
[.underlineStyle: NSUnderlineStyle.styleSingle.rawValue])
स्विफ्ट 3 एक लाइनर:
label.attributedText = NSAttributedString(string: "Text", attributes:
[NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue])
यदि आप विरासत के बिना ऐसा करने के लिए रास्ता तलाश रहे हैं:
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))
attributedText = attributedString
}
}
}
// in swift 4 - switch NSUnderlineStyleAttributeName with NSAttributedStringKey.underlineStyle
extension UILabel {
func underline() {
if let textString = self.text {
let attributedString = NSMutableAttributedString(string: textString)
attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: NSRange(location: 0, length: attributedString.length))
attributedText = attributedString
}
}
}
extension UIButton {
func underline() {
let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!)
attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: NSRange(location: 0, length: (self.titleLabel?.text!.characters.count)!))
self.setAttributedTitle(attributedString, for: .normal)
}
}
UTF16
अपने चरित्र का निर्माण करते समय गिनती के बजाय पास करना चाहिएNSRange
स्विफ्ट 4 और एक्सकोड 9 में श्लोम जवाब के लिए बस थोड़ा सा फिक्स ।
extension UILabel {
func underline() {
if let textString = self.text {
let attributedString = NSMutableAttributedString(string: textString)
attributedString.addAttribute(NSAttributedStringKey.underlineStyle,
value: NSUnderlineStyle.styleSingle.rawValue,
range: NSRange(location: 0, length: attributedString.length - 1))
attributedText = attributedString
}
}
}
extension UIButton {
func underline() {
let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!)
attributedString.addAttribute(NSAttributedStringKey.underlineStyle,
value: NSUnderlineStyle.styleSingle.rawValue,
range: NSRange(location: 0, length: (self.titleLabel?.text!.count)!))
self.setAttributedTitle(attributedString, for: .normal)
}
}
UTF16
चरित्र गिनती के बजाय आपको गिनती पास करनी चाहिए जब आपकाNSRange
स्विफ्ट 4:
1- आरटेटटेक्स्ट प्राप्त करने के लिए एक स्ट्रिंग एक्सटेंशन बनाएं ।
2- इसका प्रयोग करें
एक्सटेंशन:
import UIKit
extension String {
func getUnderLineAttributedText() -> NSAttributedString {
return NSMutableAttributedString(string: self, attributes: [.underlineStyle: NSUnderlineStyle.styleSingle.rawValue])
}
}
बटटन पर इसका उपयोग कैसे करें:
if let title = button.titleLabel?.text{
button.setAttributedTitle(title.getUnderLineAttributedText(), for: .normal)
}
लेबल पर इसका उपयोग कैसे करें:
if let title = label.text{
label.attributedText = title.getUnderLineAttributedText()
}
आप UILabel
इंटरफ़ेस बिल्डर का उपयोग करके पाठ को रेखांकित कर सकते हैं ।
यहाँ मेरे उत्तर की लिंक दी गई है: स्टोरीबोर्ड में आंशिक पाठ UILabel में अंडरलाइन विशेषता जोड़ना
उसी में उत्तर स्विफ्ट 4.2
के लिए UILable
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: textString.count))
self.attributedText = attributedString
}
}
}
नीचे की तरह UILabel के लिए कॉल करें
myLable.underline()
के लिए UIButton
extension UIButton {
func underline() {
if let textString = self.titleLabel?.text {
let attributedString = NSMutableAttributedString(string: textString)
attributedString.addAttribute(NSAttributedString.Key.underlineStyle,
value: NSUnderlineStyle.single.rawValue,
range: NSRange(location: 0, length: textString.count))
self.setAttributedTitle(attributedString, for: .normal)
}
}
}
नीचे की तरह UIButton के लिए कॉल करें
myButton.underline()
मैंने उपरोक्त उत्तरों पर ध्यान दिया और उनमें से कुछ पाठ मूल्य को बल देने वाले हैं । मैं सुरक्षित रूप से अपरिवर्तित होकर मूल्य प्राप्त करने का सुझाव दूंगा। यह शून्य मान के मामले में दुर्घटना से बचाएगा। उम्मीद है की यह मदद करेगा :)
UTF16
चरित्र गिनती के बजाय आपको गिनती पास करनी चाहिए जब आपकाNSRange
स्विफ्ट 4, 4.2 और 5।
@IBOutlet weak var lblUnderLine: UILabel!
मुझे यूआईबेल में विशेष पाठ को रेखांकित करने की आवश्यकता है। तो, रेंज और सेट विशेषताएँ खोजें।
let strSignup = "Don't have account? SIGNUP NOW."
let rangeSignUp = NSString(string: strSignup).range(of: "SIGNUP NOW.", options: String.CompareOptions.caseInsensitive)
let rangeFull = NSString(string: strSignup).range(of: strSignup, options: String.CompareOptions.caseInsensitive)
let attrStr = NSMutableAttributedString.init(string:strSignup)
attrStr.addAttributes([NSAttributedString.Key.foregroundColor : UIColor.white,
NSAttributedString.Key.font : UIFont.init(name: "Helvetica", size: 17)! as Any],range: rangeFull)
attrStr.addAttributes([NSAttributedString.Key.foregroundColor : UIColor.white,
NSAttributedString.Key.font : UIFont.init(name: "Helvetica", size: 20)!,
NSAttributedString.Key.underlineStyle: NSUnderlineStyle.thick.rawValue as Any],range: rangeSignUp) // for swift 4 -> Change thick to styleThick
lblUnderLine.attributedText = attrStr
उत्पादन
एक वाक्य में कई तारों को रेखांकित करें।
extension UILabel {
func underlineMyText(range1:String, range2:String) {
if let textString = self.text {
let str = NSString(string: textString)
let firstRange = str.range(of: range1)
let secRange = str.range(of: range2)
let attributedString = NSMutableAttributedString(string: textString)
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: firstRange)
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: secRange)
attributedText = attributedString
}
}
}
इस तरह से उपयोग करें।
lbl.text = "By continuing you agree to our Terms of Service and Privacy Policy."
lbl.underlineMyText(range1: "Terms of Service", range2: "Privacy Policy.")
स्विफ्ट 4 परिवर्तन। NSUnderlineStyle.styleSingle के बजाय NSUnderlineStyle.styleSingle.rawValue का उपयोग करने के लिए रिमाइबर ।
'let attributedString = NSAttributedString(string: "Testing")
let textRange = NSMakeRange(0, attributedString.length)
let underlinedMessage = NSMutableAttributedString(attributedString: attributedString)
underlinedMessage.addAttribute(NSAttributedStringKey.underlineStyle,
value:NSUnderlineStyle.styleSingle.rawValue,
range: textRange)
label.attributedText = underlinedMessage
`
ऊपर दिया गया उत्तर मेरे बिल्ड वातावरण में त्रुटि पैदा कर रहा है।
यह स्विफ्ट 4.0 में काम नहीं करता है:
attributedText.addAttribute(NSUnderlineStyleAttributeName,
value: NSUnderlineStyle.styleSingle.rawValue,
range: textRange)
इसके बजाय यह प्रयास करें:
attributedText.addAttribute(NSAttributedStringKey.underlineStyle,
value: NSUnderlineStyle.styleSingle.rawValue,
range: textRange)
आशा है कि यह किसी की मदद करता है।
// स्विफ्ट 4 संस्करण
let attributedString = NSMutableAttributedString(string: "Your Text Here", attributes: [NSAttributedStringKey.underlineStyle : true])
self.yourlabel.attributedText = attributedString
यदि आप लेबल के केवल आधे भाग को भी रेखांकित करना चाहते हैं तो आप इसका उपयोग कर सकते हैं: - // Swift 4.0+ के लिए
let attributesForUnderLine: [NSAttributedString.Key: Any] = [
.font: UIFont(name: AppFont.sourceSansPro_Regular, size: 12) ?? UIFont.systemFont(ofSize: 11),
.foregroundColor: UIColor.blue,
.underlineStyle: NSUnderlineStyle.single.rawValue]
let attributesForNormalText: [NSAttributedString.Key: Any] = [
.font: UIFont(name: AppFont.sourceSansPro_Regular, size: 12) ?? UIFont.systemFont(ofSize: 11),
.foregroundColor: AppColors.ColorText_787878]
let textToSet = "Want to change your preferences? Edit Now"
let rangeOfUnderLine = (textToSet as NSString).range(of: "Edit Now")
let rangeOfNormalText = (textToSet as NSString).range(of: "Want to change your preferences?")
let attributedText = NSMutableAttributedString(string: textToSet)
attributedText.addAttributes(attributesForUnderLine, range: rangeOfUnderLine)
attributedText.addAttributes(attributesForNormalText, range: rangeOfNormalText)
yourLabel.attributedText = attributedText
स्विफ्ट 2.3 के लिए
extension UIButton {
func underline() {
let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!)
attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleSingle.rawValue, range: NSRange(location: 0, length: (self.titleLabel?.text!.characters.count)!))
self.setAttributedTitle(attributedString, forState: .Normal)
}
}
और ViewController में
@IBOutlet var yourButton: UIButton!
में ViewDidLoad
विधि या अपने समारोह सिर्फ लिखने में
yourButton.underline()
यह आपके बटन के शीर्षक को रेखांकित करेगा
Swift 5 के लिए UIbuttons के लिए अंडरलाइन और सेट करने के लिए एक वर्ग। मुझे आशा है कि यह मदद करता है
import Foundation
import UIKit
class UiUtil {
static let underlineThickness = 2
class func removeUnderlineFromButton( _ button:UIButton ) {
if let str = button.titleLabel?.attributedText {
let attributedString = NSMutableAttributedString( attributedString: str )
attributedString.removeAttribute(.underlineStyle, range:
NSRange.init(location: 0, length: attributedString.length))
button.setAttributedTitle(attributedString, for: .normal)
}
}
class func setUnderlineFromButton( _ button:UIButton ) {
if let str = button.titleLabel?.attributedText {
let attributedStringUnderline = NSMutableAttributedString( attributedString:
str )
attributedStringUnderline.addAttribute(
NSAttributedString.Key.underlineStyle,
value: underlineThickness,
range: NSRange.init(location: 0, length: attributedStringUnderline.length)
)
button.setAttributedTitle(attributedStringUnderline, for: .normal)
}
}
}
NSAttributedString
?