Chcę dostać się do białych przestrzeni z przodu i na końcu mojego NSAttributedString (przycinanie). Nie mogę po prostu przekształcić go w ciąg i przycinać, ponieważ są w nim obrazy (załączniki). Jak mogę to zrobić?Swift NSAttributedString Trim
Odpowiedz
Utwórz rozszerzenie NSAttributedString
jak poniżej.
extension NSAttributedString {
public func attributedStringByTrimmingCharacterSet(charSet: NSCharacterSet) -> NSAttributedString {
let modifiedString = NSMutableAttributedString(attributedString: self)
modifiedString.trimCharactersInSet(charSet)
return NSAttributedString(attributedString: modifiedString)
}
}
extension NSMutableAttributedString {
public func trimCharactersInSet(charSet: NSCharacterSet) {
var range = (string as NSString).rangeOfCharacterFromSet(charSet)
// Trim leading characters from character set.
while range.length != 0 && range.location == 0 {
replaceCharactersInRange(range, withString: "")
range = (string as NSString).rangeOfCharacterFromSet(charSet)
}
// Trim trailing characters from character set.
range = (string as NSString).rangeOfCharacterFromSet(charSet, options: .BackwardsSearch)
while range.length != 0 && NSMaxRange(range) == length {
replaceCharactersInRange(range, withString: "")
range = (string as NSString).rangeOfCharacterFromSet(charSet, options: .BackwardsSearch)
}
}
}
i używać w viewController, gdzie chcesz użyć. jak to
let attstring = NSAttributedString(string: "this is test message. Please wait. ")
let result = attstring.attributedStringByTrimmingCharacterSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
Thx, właśnie tego chciałem !!!! –
Twoje powitanie :) –
Przyjemne rozwiązanie :) – chrysAllwood
Poniższy kod będzie działał zgodnie z Twoimi wymaganiami.
var attString: NSAttributedString = NSAttributedString(string: " this is att string")
let trimmedString = attString.string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Jak dokładnie mogę uzyskać zasięg? –
spróbuj powyższego kodu, aby usunąć przedni i końcowy obszar z przypisanego ciągu znaków. – macpandit
Powyższy kod działa poprawnie. ale zwróci ci 'String', a nie' NSAttributedString'. musisz tylko przekonwertować 'String' na' NSAttributedString', że to. ładne dwie linijki kodu. –
Zrobiłem szybką realizację 3, tylko w przypadku gdy ktoś jest zainteresowany:
/**
Trim an attributed string. Can for example be used to remove all leading and trailing spaces and line breaks.
*/
public func attributedStringByTrimmingCharactersInSet(set: CharacterSet) -> NSAttributedString {
let invertedSet = set.inverted
let rangeFromStart = string.rangeOfCharacter(from: invertedSet)
let rangeFromEnd = string.rangeOfCharacter(from: invertedSet, options: .backwards)
if let startLocation = rangeFromStart?.upperBound, let endLocation = rangeFromEnd?.lowerBound {
let location = string.distance(from: string.startIndex, to: startLocation) - 1
let length = string.distance(from: startLocation, to: endLocation) + 2
let newRange = NSRange(location: location, length: length)
return self.attributedSubstring(from: newRange)
} else {
return NSAttributedString()
}
}
Swift 3.2 Wersja:
extension NSAttributedString {
public func trimmingCharacters(in characterSet: CharacterSet) -> NSAttributedString {
let modifiedString = NSMutableAttributedString(attributedString: self)
modifiedString.trimCharacters(in: characterSet)
return NSAttributedString(attributedString: modifiedString)
}
}
extension NSMutableAttributedString {
public func trimCharacters(in characterSet: CharacterSet) {
var range = (string as NSString).rangeOfCharacter(from: characterSet)
// Trim leading characters from character set.
while range.length != 0 && range.location == 0 {
replaceCharacters(in: range, with: "")
range = (string as NSString).rangeOfCharacter(from: characterSet)
}
// Trim trailing characters from character set.
range = (string as NSString).rangeOfCharacter(from: characterSet, options: .backwards)
while range.length != 0 && NSMaxRange(range) == length {
replaceCharacters(in: range, with: "")
range = (string as NSString).rangeOfCharacter(from: characterSet, options: .backwards)
}
}
}
https://github.com/ovenbits/ Alexandria/blob/master/Sources/NSAttributedString% 2BExtensions.swift? Jeśli szukasz NSAttributedString i Trim w wyszukiwarce, masz kilka rozwiązań, one nie działają? – Larme
dziękuję Larme, ten projekt github jest naprawdę pomocny! –