Saya ingin membuat UILabel
teks yang seperti ini
Bagaimana saya bisa melakukan ini? Jika teksnya kecil, garisnya juga harus kecil.
NSAttributedString
dan UILabel attributedText
properti.
Saya ingin membuat UILabel
teks yang seperti ini
Bagaimana saya bisa melakukan ini? Jika teksnya kecil, garisnya juga harus kecil.
NSAttributedString
dan UILabel attributedText
properti.
Jawaban:
KODE UPDATE SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
kemudian:
yourLabel.attributedText = attributeString
Untuk membuat beberapa bagian dari string menyerang maka berikan jarak
let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
Objective-C
Di iOS 6.0> UILabel
mendukungNSAttributedString
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
value:@2
range:NSMakeRange(0, [attributeString length])];
Cepat
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
Definisi :
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange
Parameters List:
name : Sebuah string yang menentukan nama atribut. Kunci atribut dapat diberikan oleh kerangka kerja lain atau dapat menjadi kunci khusus yang Anda tentukan. Untuk informasi tentang di mana menemukan kunci atribut yang disediakan sistem, lihat bagian ikhtisar di Referensi Kelas NSAttributedString.
nilai : Nilai atribut yang terkait dengan nama.
aRange : Rentang karakter yang diterapkan pasangan atribut / nilai tertentu.
Kemudian
yourLabel.attributedText = attributeString;
Karena lesser than iOS 6.0 versions
Anda perlu 3-rd party component
melakukan ini. Salah satunya adalah TTTAttributedLabel , yang lainnya adalah OHAttributedLabel .
Di Swift, menggunakan enum untuk gaya garis coretan tunggal:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
Gaya coretan tambahan ( Ingatlah untuk mengakses enum menggunakan .rawValue ):
Pola coret (di-OR-ed dengan gaya):
Tentukan bahwa coretan seharusnya hanya diterapkan di seluruh kata (bukan spasi):
Saya lebih NSAttributedString
suka daripada NSMutableAttributedString
kasus sederhana ini:
NSAttributedString * title =
[[NSAttributedString alloc] initWithString:@"$198"
attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];
Konstanta untuk menentukan atribut NSUnderlineStyleAttributeName
dan NSStrikethroughStyleAttributeName
dari string yang diatribusikan:
typedef enum : NSInteger {
NSUnderlineStyleNone = 0x00,
NSUnderlineStyleSingle = 0x01,
NSUnderlineStyleThick = 0x02,
NSUnderlineStyleDouble = 0x09,
NSUnderlinePatternSolid = 0x0000,
NSUnderlinePatternDot = 0x0100,
NSUnderlinePatternDash = 0x0200,
NSUnderlinePatternDashDot = 0x0300,
NSUnderlinePatternDashDotDot = 0x0400,
NSUnderlineByWord = 0x8000
} NSUnderlineStyle;
Coret di 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
Ini bekerja untuk saya seperti pesona.
Gunakan itu sebagai ekstensi
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
}
}
Panggil seperti ini
myLabel.attributedText = "my string".strikeThrough()
Ekstensi UILabel untuk coret Aktifkan / Nonaktifkan.
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
}
}
}
}
Gunakan seperti ini:
yourLabel.strikeThrough(btn.isSelected) // true OR false
TUKAR KODE
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
kemudian:
yourLabel.attributedText = attributeString
Berkat jawaban Pangeran ;)
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
Metode lainnya adalah dengan menggunakan Ekstensi Ekstensi String
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
}
}
Memanggil fungsi: Digunakan seperti itu
testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()
Kredit untuk @Yahya - Update Desember 2017
kredit untuk @kuzdu - Update Agustus 2018
value
0
dan Purnendu roy lulusvalue: NSUnderlineStyle.styleSingle.rawValue
Anda dapat melakukannya di IOS 6 menggunakan NSMutableAttributedString.
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
Coret teks UILabel di Swift iOS. Silakan coba ini berhasil untuk saya
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
Anda dapat mengubah "strikethroughStyle" seperti styleSingle, styleThick, styleDouble
Cepat 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
}
}
Contoh:
someLabel.attributedText = someText.strikeThrough()
Bagi siapa pun yang mencari cara melakukan ini dalam sel tableview (Swift), Anda harus menyetel .attributeText seperti ini:
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
}
Jika Anda ingin menghapus coretan lakukan ini jika tidak maka akan tetap ada !:
cell.textLabel?.attributedText = nil
Swift 4.2.0
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: product.price)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attributeString.length))
lblPrice.attributedText = attributeString
Saya mungkin terlambat ke pesta.
Bagaimanapun, saya mengetahui tentang itu NSMutableAttributedString
tetapi baru-baru ini saya mencapai fungsi yang sama dengan pendekatan yang sedikit berbeda.
Setelah mengikuti semua langkah di atas Label saya, UIView dan batasannya terlihat seperti gambar di bawah ini.
Gunakan kode di bawah ini
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;
Ubah properti teks menjadi dikaitkan dan pilih teks dan klik kanan untuk mendapatkan properti font. Klik pada coretan.
Bagi mereka yang menghadapi masalah dengan serangan teks multi baris
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
Buat ekstensi String dan tambahkan metode di bawah ini
static func makeSlashText(_ text:String) -> NSAttributedString {
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
return attributeString
}
lalu gunakan untuk label Anda seperti ini
yourLabel.attributedText = String.makeSlashText("Hello World!")
Ini yang dapat Anda gunakan di Swift 4 karena NSStrikethroughStyleAttributeName telah diubah menjadi 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 dan 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)
}
}
Contoh
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)