취소 선 텍스트가있는 UILabel을 어떻게 만들 수 있습니까?


121

UILabel텍스트가 이런 식 으로 만들고 싶습니다

여기에 이미지 설명 입력

어떻게 할 수 있습니까? 텍스트가 작 으면 줄도 작아야합니다.



iOS 6 지원 만 필요한 경우 NSAttributedStringUILabel attributedText속성을 사용하여이를 수행 할 수 있습니다 .
rmaddy

버튼 텍스트를 해제하는 것이 가능합니까
SCS

답변:


221

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)

목표 -C

에서 아이폰 OS 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:

name : 속성 이름을 지정하는 문자열입니다. 속성 키는 다른 프레임 워크에서 제공하거나 사용자가 정의한 사용자 정의 키일 수 있습니다. 시스템 제공 속성 키를 찾을 수있는 위치에 대한 정보는 NSAttributedString 클래스 참조의 개요 섹션을 참조하십시오.

value : 이름과 관련된 속성 값입니다.

aRange : 지정된 속성 / 값 쌍이 적용되는 문자 범위입니다.

그때

yourLabel.attributedText = attributeString;

들어 lesser than iOS 6.0 versions당신이 필요로 3-rd party component이 작업을 수행 할 수 있습니다. 그중 하나는 TTTAttributedLabel 이고 다른 하나는 OHAttributedLabel 입니다.


iOS 5.1.1 이하 버전의 경우 제 3 자 특성 레이블을 사용하여 특성 텍스트를 표시하려면 어떻게해야합니까?
Dev

좋은 튜토리얼을 제안 할 수 있습니까? 제공하신 링크는 조금 이해하기 어렵습니다. :(
Dev

iOS 용 타사 속성 레이블을 만들기 위해해야 ​​할 일을 설명해 주시겠습니까?
Dev

@ 2는 무엇입니까? 매직 넘버?
Ben Sinclair

7
나는 당신이 그것을 저지르는 것을 잊은 것 같습니다. @ 2 대신 NSUnderlineStyle에서 적절한 값을 사용해야합니다. 나는 여기서 약간 현학적입니다.
Ben Sinclair

45

Swift에서 단일 취소 선 스타일에 열거 형 사용 :

let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString

추가 취소 선 스타일 ( .rawValue를 사용하여 열거 형에 액세스해야 함 ) :

  • NSUnderlineStyle.StyleNone
  • NSUnderlineStyle.StyleSingle
  • NSUnderlineStyle.StyleThick
  • NSUnderlineStyle.StyleDouble

취소 선 패턴 (스타일과 OR로 연결됨) :

  • NSUnderlineStyle.PatternDot
  • NSUnderlineStyle.PatternDash
  • NSUnderlineStyle.PatternDashDot
  • NSUnderlineStyle.PatternDashDotDot

취소 선이 공백이 아닌 단어 전체에만 적용되도록 지정합니다.

  • NSUnderlineStyle.ByWord

1
위로는 번호 대신 적절한 상수를 사용하여 투표
미하이 Fratu에게

36

이 간단한 경우 NSAttributedString보다 선호합니다 NSMutableAttributedString.

NSAttributedString * title =
    [[NSAttributedString alloc] initWithString:@"$198"
                                    attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];

속성 문자열 의 NSUnderlineStyleAttributeNameNSStrikethroughStyleAttributeName속성을 모두 지정하기위한 상수 :

typedef enum : NSInteger {  
  NSUnderlineStyleNone = 0x00,  
  NSUnderlineStyleSingle = 0x01,  
  NSUnderlineStyleThick = 0x02,  
  NSUnderlineStyleDouble = 0x09,  
  NSUnderlinePatternSolid = 0x0000,  
  NSUnderlinePatternDot = 0x0100,  
  NSUnderlinePatternDash = 0x0200,  
  NSUnderlinePatternDashDot = 0x0300,  
  NSUnderlinePatternDashDotDot = 0x0400,  
  NSUnderlineByWord = 0x8000  
} NSUnderlineStyle;  

27

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

StrikeThrough가 제거되지 않은 솔루션을 알고 있습니까? forums.developer.apple.com/thread/121366과
JeroenJK

23

SWIFT 코드

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: "Your Text")
    attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

그때:

yourLabel.attributedText = attributeString

Prince 답변 덕분에 ;)


15

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

다른 방법은 문자열 확장 확장 을 사용하는 것입니다.

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 년 12 월 업데이트 @kuzdu에 대한
크레딧 -2018 년 8 월 업데이트


나를 위해 작동하지 않습니다. Purnendu roy의 답변이 저에게 효과적입니다. 유일한 차이점은 통과 value 0하고 Purnendu roy passvalue: NSUnderlineStyle.styleSingle.rawValue
kuzdu

@kuzdu 내 대답이 2017 년 12 월에 돌아 왔다는 재미있는 일인데 그는 방금 내 코드를 복사하고 NSUnderlineStyle.styleSingle.rawValue를 추가했습니다 ^-^하지만 문제
없이이

9

NSMutableAttributedString을 사용하여 IOS 6에서 할 수 있습니다.

NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;

8

Swift iOS에서 UILabel 텍스트를 지우십시오. 제발 이것을 시도해보십시오.

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

styleSingle, styleThick, styleDouble과 같이 "strikethroughStyle"을 변경할 수 있습니다. 여기에 이미지 설명 입력


5

스위프트 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()

값 : 1과 값의 차이 : 2
iOS

2
@iOS 값은 텍스트를 취소하는 선의 두께입니다. 값이 클수록, 두꺼운 텍스트를 가로 지르는 라인
블라디미르 Pchelyakov

4

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

2

스위프트 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

2

파티에 늦을 수도 있습니다.

어쨌든, 나는 알고 NSMutableAttributedString있지만 최근에 약간 다른 접근 방식으로 동일한 기능을 달성했습니다.

  • 높이 = 1로 UIView를 추가했습니다.
  • UIView의 선행 및 후행 제약 조건을 레이블의 선행 및 후행 제약 조건과 일치 시켰습니다.
  • 레이블 중앙에 UIView 정렬

위의 모든 단계를 수행 한 후 내 Label, UIView 및 해당 제약 조건은 아래 이미지와 같습니다.

여기에 이미지 설명 입력


스마트 솔루션 👍
Dania Delbani

1

아래 코드 사용

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;   

1

텍스트 속성을 속성으로 변경하고 텍스트를 선택하고 마우스 오른쪽 버튼을 클릭하여 글꼴 속성을 가져옵니다. 취소 선을 클릭하십시오. 스크린 샷


0

여러 줄 텍스트 스트라이크 문제에 직면 한 사람들을 위해

    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

0

문자열 확장을 만들고 아래 방법 추가

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!")

0

NSStrikethroughStyleAttributeName이 NSAttributedStringKey.strikethroughStyle로 변경 되었기 때문에 Swift 4에서 사용할 수 있습니다.

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: "Your Text")

attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))

self.lbl.attributedText = attributeString

0

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.