2016-08-03 61 views
8

我想在前面和我的NSAttributedString(修剪它)結束時使用白色空格。我不能簡單地將它轉換爲字符串並進行修剪,因爲它中有圖像(附件)。 我該怎麼做?Swift NSAttributedString修剪

+1

https://github.com/ovenbits/亞歷山大/ blob/master/Sources/NSAttributedString%2BExtensions.swift?如果你在搜索引擎中尋找NSAttributedString和Trim,你有一些解決方案,他們不工作? – Larme

+0

謝謝Larme,這個github項目真的很有幫助! –

回答

17

創建NSAttributedString的擴展名,如下所示。

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) 
     } 
    } 
} 

並在你想使用的viewController中使用。這樣

let attstring = NSAttributedString(string: "this is test message. Please wait.     ") 
let result = attstring.attributedStringByTrimmingCharacterSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 
+0

Thx,這就是我想要的! –

+0

您的歡迎:) –

+0

不錯的解決方案:) – chrysAllwood

-2

以下代碼可以滿足您的要求。

var attString: NSAttributedString = NSAttributedString(string: " this is att string") 

let trimmedString = attString.string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 
+0

我究竟如何得到範圍? –

+0

嘗試使用上面提到的代碼從屬性字符串中刪除前端和結尾空格。 – macpandit

+0

上面的代碼工作正常。但它會返回給你'字符串'而不是'NSAttributedString'。你只需要將'String'轉換爲'NSAttributedString'即可。漂亮的兩行代碼。 –

1

我做了一個迅速實現3,以防萬一有人有興趣:

/** 
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() 
    } 
} 
0

雨燕3.2版本:

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) 
     } 
    } 
}