2016-08-03 14 views
8

Tôi muốn có được các khoảng trống màu trắng ở phía trước và ở cuối NSAttributedString của tôi (Cắt nó). Tôi không thể chỉ đơn giản là chuyển đổi nó thành chuỗi và làm trang trí vì có hình ảnh (file đính kèm) trong đó. Tôi có thể làm như thế nào?Swift NSAttributedString Trim

+1

https://github.com/ovenbits/ Alexandria/blob/master/Sources/NSAttributedString% 2BExtensions.swift? Nếu bạn tìm NSAttributedString và Trim trong Công cụ Tìm kiếm, bạn có một số giải pháp, chúng không hoạt động? – Larme

+0

cảm ơn Larme, dự án github này thực sự hữu ích! –

Trả lời

17

Tạo phần mở rộng NSAttributedString như bên dưới.

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

và sử dụng trong chế độ xemBộ điều khiển nơi bạn muốn sử dụng. như thế này

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

Thx, đây là những gì tôi muốn !!!! –

+0

Chào mừng bạn :) –

+0

Giải pháp tuyệt vời :) – chrysAllwood

-2

Mã sau sẽ hoạt động theo yêu cầu của bạn.

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

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

Làm cách nào để tôi nhận được dải ô? –

+0

thử mã được đề cập ở trên để xóa không gian trước và cuối khỏi chuỗi được phân bổ. – macpandit

+0

Mã trên hoạt động tốt. nhưng nó sẽ trả về cho bạn 'String' không phải' NSAttributedString'. bạn chỉ cần chuyển 'String' thành' NSAttributedString'. tốt đẹp hai dòng mã. –

1

tôi đã nhanh chóng 3 thực hiện, chỉ trong trường hợp có ai quan tâm:

/** 
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

Swift 3.2 Version:

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