ฉันต้องการสร้างUILabel
ข้อความที่เป็นแบบนี้
ฉันจะทำเช่นนี้ได้อย่างไร? เมื่อข้อความมีขนาดเล็กบรรทัดควรมีขนาดเล็กด้วย
NSAttributedString
และUILabel attributedText
สถานที่ให้บริการ
ฉันต้องการสร้างUILabel
ข้อความที่เป็นแบบนี้
ฉันจะทำเช่นนี้ได้อย่างไร? เมื่อข้อความมีขนาดเล็กบรรทัดควรมีขนาดเล็กด้วย
NSAttributedString
และUILabel attributedText
สถานที่ให้บริการ
คำตอบ:
รหัสอัปเดต SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
แล้ว:
yourLabel.attributedText = attributeString
หากต้องการสร้างบางส่วนของสตริงเพื่อขีดฆ่าให้ระบุช่วง
let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
Objective-C
ในiOS 6.0> UILabel
รองรับNSAttributedString
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
value:@2
range:NSMakeRange(0, [attributeString length])];
รวดเร็ว
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
คำจำกัดความ :
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange
Parameters List:
ชื่อ : สตริงที่ระบุชื่อแอ็ตทริบิวต์ คีย์แอตทริบิวต์สามารถจัดทำโดยเฟรมเวิร์กอื่นหรืออาจเป็นคีย์ที่คุณกำหนดเองก็ได้ สำหรับข้อมูลเกี่ยวกับตำแหน่งที่จะค้นหาคีย์แอ็ตทริบิวต์ที่ระบบจัดหาให้ดูส่วนภาพรวมในการอ้างอิงคลาส NSAttributedString
ค่า : ค่าแอตทริบิวต์ที่เกี่ยวข้องกับชื่อ
aRange : ช่วงของอักขระที่ใช้คู่แอตทริบิวต์ / ค่าที่ระบุ
แล้วก็
yourLabel.attributedText = attributeString;
สำหรับlesser than iOS 6.0 versions
คุณต้อง3-rd party component
ทำเช่นนี้ หนึ่งในนั้นคือTTTAttributedLabelอื่นเป็นOHAttributedLabel
ใน Swift ใช้ enum สำหรับรูปแบบเส้นขีดเดียว:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
รูปแบบขีดทับเพิ่มเติม ( อย่าลืมเข้าถึง enum โดยใช้ .rawValue ):
รูปแบบขีดทับ (เพื่อให้สอดคล้องกับสไตล์):
ระบุว่าควรใช้ขีดฆ่าข้ามคำเท่านั้น (ไม่เว้นวรรค):
ฉันชอบNSAttributedString
มากกว่าNSMutableAttributedString
สำหรับกรณีง่ายๆนี้:
NSAttributedString * title =
[[NSAttributedString alloc] initWithString:@"$198"
attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];
ค่าคงที่สำหรับระบุทั้งแอตทริบิวต์NSUnderlineStyleAttributeName
และNSStrikethroughStyleAttributeName
แอตทริบิวต์ของสตริงที่ประกอบ:
typedef enum : NSInteger {
NSUnderlineStyleNone = 0x00,
NSUnderlineStyleSingle = 0x01,
NSUnderlineStyleThick = 0x02,
NSUnderlineStyleDouble = 0x09,
NSUnderlinePatternSolid = 0x0000,
NSUnderlinePatternDot = 0x0100,
NSUnderlinePatternDash = 0x0200,
NSUnderlinePatternDashDot = 0x0300,
NSUnderlinePatternDashDotDot = 0x0400,
NSUnderlineByWord = 0x8000
} NSUnderlineStyle;
Strikethrough ใน Swift 5.0
let attributeString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.rawValue,
range: NSMakeRange(0, attributeString.length))
self.yourLabel.attributedText = attributeString
มันได้ผลสำหรับฉันเหมือนมีเสน่ห์
ใช้เป็นส่วนขยาย
extension String {
func strikeThrough() -> NSAttributedString {
let attributeString = NSMutableAttributedString(string: self)
attributeString.addAttribute(
NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.rawValue,
range:NSMakeRange(0,attributeString.length))
return attributeString
}
}
เรียกแบบนี้
myLabel.attributedText = "my string".strikeThrough()
ส่วนขยาย UILabel สำหรับขีดฆ่าเปิด / ปิดการใช้งาน
extension UILabel {
func strikeThrough(_ isStrikeThrough:Bool) {
if isStrikeThrough {
if let lblText = self.text {
let attributeString = NSMutableAttributedString(string: lblText)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0,attributeString.length))
self.attributedText = attributeString
}
} else {
if let attributedStringText = self.attributedText {
let txt = attributedStringText.string
self.attributedText = nil
self.text = txt
return
}
}
}
}
ใช้แบบนี้:
yourLabel.strikeThrough(btn.isSelected) // true OR false
รหัส SWIFT
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
แล้ว:
yourLabel.attributedText = attributeString
ขอบคุณคำตอบ Prince ;)
SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text Goes Here")
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length))
self.lbl_productPrice.attributedText = attributeString
วิธีอื่นคือใช้ String Extension
Extension
extension String{
func strikeThrough()->NSAttributedString{
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: self)
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length))
return attributeString
}
}
การเรียกใช้ฟังก์ชัน:ใช้อย่างนั้น
testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()
เครดิต @Yahya - อัปเดตธันวาคม 2017
เครดิต @kuzdu - อัปเดต ส.ค. 2018
value
0
และ Purnendu roy passvalue: NSUnderlineStyle.styleSingle.rawValue
คุณสามารถทำได้ใน IOS 6 โดยใช้ NSMutableAttributedString
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
ขีดฆ่าข้อความ UILabel ใน Swift iOS โปรดลองใช้มันได้ผลสำหรับฉัน
let attributedString = NSMutableAttributedString(string:"12345")
attributedString.addAttribute(NSAttributedStringKey.baselineOffset, value: 0, range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSNumber(value: NSUnderlineStyle.styleThick.rawValue), range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSAttributedStringKey.strikethroughColor, value: UIColor.gray, range: NSMakeRange(0, attributedString.length))
yourLabel.attributedText = attributedString
คุณสามารถเปลี่ยน "strikethroughStyle" ของคุณเช่น styleSingle, styleThick, styleDouble
สวิฟต์ 5
extension String {
/// Apply strike font on text
func strikeThrough() -> NSAttributedString {
let attributeString = NSMutableAttributedString(string: self)
attributeString.addAttribute(
NSAttributedString.Key.strikethroughStyle,
value: 1,
range: NSRange(location: 0, length: attributeString.length))
return attributeString
}
}
ตัวอย่าง:
someLabel.attributedText = someText.strikeThrough()
สำหรับใครที่กำลังมองหาวิธีทำในเซลล์ tableview (Swift) คุณต้องตั้งค่า. AttributeText ดังนี้:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TheCell")!
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: message)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
cell.textLabel?.attributedText = attributeString
return cell
}
หากคุณต้องการลบขีดฆ่าให้ทำเช่นนี้มิฉะนั้นมันจะค้าง!:
cell.textLabel?.attributedText = nil
Swift 4.2
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: product.price)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attributeString.length))
lblPrice.attributedText = attributeString
ฉันอาจจะไปงานปาร์ตี้สาย
อย่างไรก็ตามฉันทราบเกี่ยวกับNSMutableAttributedString
แต่เมื่อเร็ว ๆ นี้ฉันได้รับฟังก์ชันเดียวกันนี้ด้วยวิธีการที่แตกต่างกันเล็กน้อย
หลังจากทำตามขั้นตอนข้างต้นทั้งหมดป้ายกำกับของฉัน UIView และข้อ จำกัด ก็ดูเหมือนภาพด้านล่าง
ใช้รหัสด้านล่าง
NSString* strPrice = @"£399.95";
NSMutableAttributedString *titleString = [[NSMutableAttributedString alloc] initWithString:strPrice];
[finalString addAttribute: NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger: NSUnderlineStyleSingle] range: NSMakeRange(0, [titleString length])];
self.lblOldPrice.attributedText = finalString;
เปลี่ยนคุณสมบัติข้อความเป็นแอตทริบิวต์และเลือกข้อความและคลิกขวาเพื่อรับคุณสมบัติแบบอักษร คลิกที่ขีดทับ
สำหรับผู้ที่ประสบปัญหาการขีดฆ่าข้อความหลายบรรทัด
let attributedString = NSMutableAttributedString(string: item.name!)
//necessary if UILabel text is multilines
attributedString.addAttribute(NSBaselineOffsetAttributeName, value: 0, range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSStrikethroughStyleAttributeName, value: NSNumber(value: NSUnderlineStyle.styleSingle.rawValue), range: NSMakeRange(0, attributedString.length))
attributedString.addAttribute(NSStrikethroughColorAttributeName, value: UIColor.darkGray, range: NSMakeRange(0, attributedString.length))
cell.lblName.attributedText = attributedString
สร้างนามสกุลสตริงและเพิ่มวิธีการด้านล่าง
static func makeSlashText(_ text:String) -> NSAttributedString {
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
return attributeString
}
จากนั้นใช้สำหรับฉลากของคุณเช่นนี้
yourLabel.attributedText = String.makeSlashText("Hello World!")
นี่คือสิ่งที่คุณสามารถใช้ได้ใน Swift 4 เนื่องจาก NSStrikethroughStyleAttributeName ถูกเปลี่ยนเป็น NSAttributedStringKey.strikethroughStyle
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
self.lbl.attributedText = attributeString
Swift 4 และ 5
extension NSAttributedString {
/// Returns a new instance of NSAttributedString with same contents and attributes with strike through added.
/// - Parameter style: value for style you wish to assign to the text.
/// - Returns: a new instance of NSAttributedString with given strike through.
func withStrikeThrough(_ style: Int = 1) -> NSAttributedString {
let attributedString = NSMutableAttributedString(attributedString: self)
attributedString.addAttribute(.strikethroughStyle,
value: style,
range: NSRange(location: 0, length: string.count))
return NSAttributedString(attributedString: attributedString)
}
}
ตัวอย่าง
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)