source

취소선 텍스트를 사용하여 UILabel을 작성하려면 어떻게 해야 합니까?

gigabyte 2023. 4. 14. 21:46
반응형

취소선 텍스트를 사용하여 UILabel을 작성하려면 어떻게 해야 합니까?

작성하려고 합니다.UILabel이 텍스트는 다음과 같습니다.

여기에 이미지 설명 입력

이거 어떻게 해?텍스트가 작을 경우 줄도 작아야 합니다.

SWIFT 5 업데이트 코드

let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
    attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSRange(location: 0, length: attributeString.length))

그 후, 다음과 같이 합니다.

yourLabel.attributedText = attributeString

스트링의 일부를 만들어 범위를 제공하다

let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)

목표-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:

name : 아트리뷰트명을 지정하는 문자열.속성 키는 다른 프레임워크에서 제공하거나 사용자가 정의하는 사용자 지정 프레임워크일 수 있습니다.시스템에서 제공하는 Atribut 키의 입수처에 대해서는, 「NSAttribedString Class Reference 」의 「개요」섹션을 참조해 주세요.

value : 이름과 관련된 Atribute 값.

aRange : 지정된 Atribute/Value 쌍을 적용할 문자 범위.

그리고나서

yourLabel.attributedText = attributeString;

위해서lesser than iOS 6.0 versions필요.3-rd party component이 일을 하기 위해서.그 중 하나는 TTTttributed Label이고 다른 하나는 OHAttributed Label입니다.

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

let attributedText = NSAttributedString(
    string: "Label Text",
    attributes: [.strikethroughStyle: NSUnderlineStyle.single.rawValue]
)
label.attributedText = attributedText

기타 스트리커 스타일(.rawValue를 사용하는 것을 잊지 마십시오):

  • .none
  • .single
  • .thick
  • .double

스트라이크 러프 패턴(스타일과 OR 구분):

  • .patternDot
  • .patternDash
  • .patternDashDot
  • .patternDashDotDot

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

  • .byWord

나는 더 좋다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;  

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

스위프트 코드

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

그 후, 다음과 같이 합니다.

yourLabel.attributedText = attributeString

프린스의 답변 덕분입니다;)

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 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월 갱신

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

style과 같은 strikethrough Style을 변경할 수 있습니다.싱글, 스타일두툼한 스타일더블

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

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

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

테이블 뷰 셀(Swift)에서 이 작업을 수행하는 방법을 찾는 사용자는 .attribute를 설정해야 합니다.다음과 같은 텍스트:

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

파티에 늦을지도 몰라요.

어쨋든, 나는 그 일에 대해 알고 있다.NSMutableAttributedString하지만 최근에는 조금 다른 접근법으로 동일한 기능을 구현했습니다.

  • 높이=1의 UIView를 추가했습니다.
  • 라벨의 선행 및 후행 구속조건과 라벨의 선행 및 후행 구속조건을 일치시켰다.
  • 라벨 중앙에 UIView 위치 맞추기

위의 모든 단계를 수행한 결과, 나의 라벨, UIView 및 그 제약조건은 아래 그림과 같습니다.

여기에 이미지 설명 입력

Swift5 UILabel Extension.스트리커를 제거해도 작동하지 않을 수 있습니다.이 경우 이 코드를 사용합니다.

extension UILabel {
    func strikeThrough(_ isStrikeThrough: Bool = true) {
        guard let text = self.text else {
            return
        }
        
        if isStrikeThrough {
            let attributeString =  NSMutableAttributedString(string: text)
            attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0,attributeString.length))
            self.attributedText = attributeString
        } else {
            let attributeString =  NSMutableAttributedString(string: text)
            attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: [], range: NSMakeRange(0,attributeString.length))
            self.attributedText = attributeString
        }
    }
}

아래 코드 사용

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;   

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

Swift 5 - 쇼트 버전

let attributedText = NSAttributedString(
    string: "Label Text",
    attributes: [.strikethroughStyle: NSUnderlineStyle.single.rawValue]
)

yourLabel.attributedText = attributedText

텍스트 속성을 Attributed로 변경하고 텍스트를 선택한 후 오른쪽 버튼을 클릭하여 글꼴 속성을 가져옵니다.취소선을 클릭합니다. 스크린샷

iOS 10.3에서는 NSBaselineOffsetAttributeName을 여기서 설명한 바와 같이 스트링에 추가하여 스트링 스트링을 취소선으로 되돌리는 문제가 있습니다.drawText:in:을 재정의하는 것은 특히 컬렉션 뷰 또는 테이블 뷰 셀에서 느릴 수 있습니다.

단일 솔 - 뷰를 추가하여 선을 렌더링합니다.

두 번째 솔 -

attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
attributeString.addAttribute(NSAttributedString.Key.baselineOffset, value: 2, range: NSMakeRange(0, attributeString.length))```

스위프트 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: "440").withStrikeThrough(1)
myLabel.attributedText = example

결과.

여기에 이미지 설명 입력

여러 줄의 텍스트 스트라이크가 문제가 되는 사용자용

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

이는 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

언급URL : https://stackoverflow.com/questions/13133014/how-can-i-create-a-uilabel-with-strikethrough-text

반응형