Tôi muốn tạo một UILabel
trong đó văn bản như thế này
Tôi có thể làm cái này như thế nào? Khi văn bản nhỏ, dòng cũng phải nhỏ.
NSAttributedString
và thuộc UILabel attributedText
tính.
Tôi muốn tạo một UILabel
trong đó văn bản như thế này
Tôi có thể làm cái này như thế nào? Khi văn bản nhỏ, dòng cũng phải nhỏ.
NSAttributedString
và thuộc UILabel attributedText
tính.
Câu trả lời:
MÃ CẬP NHẬT SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
sau đó:
yourLabel.attributedText = attributeString
Để thực hiện một số phần của chuỗi để tấn công, sau đó cung cấp phạm vi
let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
Objective-C
Trong iOS 6.0> UILabel
hỗ trợNSAttributedString
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
value:@2
range:NSMakeRange(0, [attributeString length])];
Nhanh
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
Định nghĩa :
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange
Parameters List:
name : Một chuỗi chỉ định tên thuộc tính. Các khóa thuộc tính có thể được cung cấp bởi một khuôn khổ khác hoặc có thể là những khóa tùy chỉnh do bạn xác định. Để biết thông tin về nơi tìm khóa thuộc tính do hệ thống cung cấp, hãy xem phần tổng quan trong Tham chiếu Lớp NSAttributedString.
value : Giá trị thuộc tính được liên kết với tên.
aRange : Phạm vi ký tự áp dụng cặp thuộc tính / giá trị đã chỉ định.
Sau đó
yourLabel.attributedText = attributeString;
Đối với lesser than iOS 6.0 versions
bạn cần 3-rd party component
phải làm điều này. Một trong số đó là TTTAttributedLabel , một trong số đó là OHAttributedLabel .
Trong Swift, sử dụng enum cho kiểu dòng gạch ngang:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
Các kiểu gạch ngang bổ sung ( Hãy nhớ truy cập enum bằng cách sử dụng .rawValue ):
Các mẫu gạch ngang (được HOẶC phù hợp với kiểu):
Chỉ định rằng gạch ngang chỉ nên được áp dụng trên các từ (không phải dấu cách):
Tôi thích NSAttributedString
hơn là NSMutableAttributedString
cho trường hợp đơn giản này:
NSAttributedString * title =
[[NSAttributedString alloc] initWithString:@"$198"
attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];
Các hằng số để chỉ định cả thuộc tính NSUnderlineStyleAttributeName
và NSStrikethroughStyleAttributeName
thuộc tính của một chuỗi được phân bổ:
typedef enum : NSInteger {
NSUnderlineStyleNone = 0x00,
NSUnderlineStyleSingle = 0x01,
NSUnderlineStyleThick = 0x02,
NSUnderlineStyleDouble = 0x09,
NSUnderlinePatternSolid = 0x0000,
NSUnderlinePatternDot = 0x0100,
NSUnderlinePatternDash = 0x0200,
NSUnderlinePatternDashDot = 0x0300,
NSUnderlinePatternDashDotDot = 0x0400,
NSUnderlineByWord = 0x8000
} NSUnderlineStyle;
Gạch ngang trong 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
Nó làm việc cho tôi như một cái duyên.
Sử dụng nó làm phần mở rộng
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
}
}
Gọi như thế này
myLabel.attributedText = "my string".strikeThrough()
Tiện ích mở rộng nhãn cho gạch ngang Bật / Tắt.
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
}
}
}
}
Sử dụng nó như thế này:
yourLabel.strikeThrough(btn.isSelected) // true OR false
MÃ SWIFT
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
sau đó:
yourLabel.attributedText = attributeString
Cảm ơn câu trả lời của 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
Phương pháp khác là sử dụng Phần mở rộng chuỗi mở
rộng
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
}
}
Gọi chức năng: Đã sử dụng nó như vậy
testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()
Tín dụng cho @Yahya - cập nhật tháng 12 năm 2017
Tín dụng cho @kuzdu - cập nhật tháng 8 năm 2018
value
0
và Purnendu roy quavalue: NSUnderlineStyle.styleSingle.rawValue
Bạn có thể làm điều đó trong IOS 6 bằng NSMutableAttributedString.
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
Loại bỏ văn bản UILabel trong Swift iOS. Hãy thử cái này nó làm việc cho tôi
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
Bạn có thể thay đổi "phong cách gạch ngang" của mình như styleSingle, styleThick, styleDouble
Swift 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
}
}
Thí dụ:
someLabel.attributedText = someText.strikeThrough()
Đối với bất kỳ ai đang tìm cách thực hiện việc này trong ô tableview (Swift), bạn phải đặt .attributeText như sau:
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
}
Nếu bạn muốn loại bỏ gạch ngang, hãy làm điều này nếu không nó sẽ dính xung quanh !:
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
Tôi có thể đến muộn bữa tiệc.
Dù sao, tôi cũng biết về chức năng NSMutableAttributedString
nhưng gần đây tôi đã đạt được chức năng tương tự với cách tiếp cận hơi khác.
Sau khi làm theo tất cả các bước trên, Nhãn, UIView và các ràng buộc của nó trông giống như hình dưới đây.
Sử dụng mã bên dưới
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;
Thay đổi thuộc tính văn bản thành thuộc tính và chọn văn bản và nhấp chuột phải để nhận thuộc tính phông chữ. Nhấp vào gạch ngang.
Đối với những người gặp vấn đề với cảnh cáo văn bản nhiều dòng
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
Tạo phần mở rộng chuỗi và thêm phương thức bên dưới
static func makeSlashText(_ text:String) -> NSAttributedString {
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
return attributeString
}
sau đó sử dụng cho nhãn của bạn như thế này
yourLabel.attributedText = String.makeSlashText("Hello World!")
Đây là cái bạn có thể sử dụng trong Swift 4 vì NSStrikethroughStyleAttributeName đã được đổi thành 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 và 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)
}
}
Thí dụ
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)