2

내 앱에서 검색 옵션을 사용하고 있습니다. 단어가 UISearchBar으로 강조 표시됩니다. 주어진 단어가 여러 번 레이블에 나타날 수 있으므로 모든 단어를 강조 표시해야합니다. 모두 Upperlower 경우에 지원하는iOS Swift 신속하게 특정 텍스트 색상을 라벨 내부에서 변경하십시오.

var SearchAttributeText = "The" 
let range = (TextValue as NSString).range(of: SearchAttributeText) 
let attribute = NSMutableAttributedString.init(string: TextValue) 
attribute.addAttribute(NSForegroundColorAttributeName, value: UIColor.red , range: range) 
self.label.attributedText = attribute 

필요가있다 방법, 여기 내 샘플 코드, 내가 코드의 일부 세트 시도했지만 그것은 그 단어 하나만 발생을 강조 할 것이다. 단어 The이 여러 번 강조되어 모두 강조 표시 될 수 있습니다.

+0

locationlength 매개 변수를 증가시켜 범위이 자습서를 참조 코드 업데이트의 아래 라인 :은 https ://iosdevcenters.blogspot.com/2015/12/how-to-set-use-multiple-font-colors-in.html – Bhadresh

+0

@Bhadresh 이미 주어진 블로그를 기준으로 범위를 기반으로 색상이 변경된이 블로그를 참조한 –

+0

[이 질문] (https://stackoverflow.com/questions/36865443/get-all-ranges-of-a-substring-in-a-string-in-swift)을 사용하여 특정 부분 문자열의 모든 범위를 가져옵니다. 그들을 반복합니다. – the4kman

답변

1

당신은 문자열에서 검색하는 코드를 사용할 수 있습니다

//Text need to be searched 
    let SearchAttributeText = "the" 

    //Store label text in variable as NSString 
    let contentString = lblContent.text! as NSString 

    //Create range of label text 
    var rangeString = NSMakeRange(0, contentString.length) 

    //Convert label text into attributed string 
    let attribute = NSMutableAttributedString.init(string: contentString as String) 

    while (rangeString.length != NSNotFound && rangeString.location != NSNotFound) { 

     //Get the range of search text 
     let colorRange = (lblContent.text?.lowercased() as! NSString).range(of: SearchAttributeText, options: NSString.CompareOptions(rawValue: 0), range: rangeString) 

     if (colorRange.location == NSNotFound) { 
      //If location is not present in the string the loop will break 
      break 
     } else { 
      //This line of code colour the searched text 
      attribute.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red , range: colorRange) 
      lblContent.attributedText = attribute 

      //This line of code increment the rangeString variable 
      rangeString = NSMakeRange(colorRange.location + colorRange.length, contentString.length - (colorRange.location + colorRange.length)) 
     } 
    } 

NSRange

rangeString = NSMakeRange(colorRange.location + colorRange.length, contentString.length - (colorRange.location + colorRange.length))