2017-01-13 4 views
1

Ich habe eine Tabelle von Elementen und jedes Element hat ein Etikett. Ich habe auch eine Suchleiste, die verwendet wird, um die Elemente in der Tabelle basierend darauf zu filtern, ob mySearchBar.text eine Teilzeichenfolge von myLabel.text ist.Machen Sie einen Teil einer Zeichenfolge fett, die eine Suchzeichenfolge

Das funktioniert alles gut, aber ich möchte die Teile des Etikettentexts, die mit der Suchzeichenfolge übereinstimmen, fett machen.

Das Endprodukt wäre etwas ähnlich wie Google Maps Suche.

enter image description here

Antwort

2

Hier ist ein Beispiel dessen, was ich Umsetzung endete:

@IBOutlet weak var mySearchBar: UISearchBar! 
@IBOutlet weak var myLabel: UILabel! 

... 

func makeMatchingPartBold(searchText: String) { 

    // check label text & search text 
    guard 
     let labelText = myLabel.text, 
     let searchText = mySearchBar.text 
    else { 
     return 
    } 

    // bold attribute 
    let boldAttr = [NSFontAttributeName: UIFont.boldSystemFont(ofSize: myLabel.font.pointSize)] 

    // check if label text contains search text 
    if let matchRange: Range = labelText.lowercased().range(of: searchText.lowercased()) { 

     // get range start/length because NSMutableAttributedString.setAttributes() needs NSRange not Range<String.Index> 
     let matchRangeStart: Int = labelText.distance(from: labelText.startIndex, to: matchRange.lowerBound) 
     let matchRangeEnd: Int = labelText.distance(from: labelText.startIndex, to: matchRange.upperBound) 
     let matchRangeLength: Int = matchRangeEnd - matchRangeStart 

     // create mutable attributed string & bold matching part 
     let newLabelText = NSMutableAttributedString(string: labelText) 
     newLabelText.setAttributes(boldAttr, range: NSMakeRange(matchRangeStart, matchRangeLength)) 

     // set label attributed text 
     myLabel.attributedText = newNameText 
    } 
} 
+1

Anstelle der Verwendung von '.lowercased() Bereich (von: searchText.lowercased()).' Sie können „verwenden. Bereich (von: searchText, Optionen: .caseInsensitive) " – mholgate

Verwandte Themen