7
Tôi muốn chuyển đổi NSAttributedString chứa RTFD thành chữ hoa mà không làm mất các thuộc tính của các ký tự và đồ họa hiện có.cách thay đổi ký tự case thành Upper trong NSAttributedString
Cảm ơn,
Tôi muốn chuyển đổi NSAttributedString chứa RTFD thành chữ hoa mà không làm mất các thuộc tính của các ký tự và đồ họa hiện có.cách thay đổi ký tự case thành Upper trong NSAttributedString
Cảm ơn,
EDIT:
@fluidsonic là đúng rằng mã ban đầu là không chính xác. Dưới đây là một phiên bản cập nhật trong Swift, thay thế văn bản trong mỗi phạm vi thuộc tính với một phiên bản trên của chuỗi trong phạm vi đó.
extension NSAttributedString {
func uppercased() -> NSAttributedString {
let result = NSMutableAttributedString(attributedString: self)
result.enumerateAttributes(in: NSRange(location: 0, length: length), options: []) {_, range, _ in
result.replaceCharacters(in: range, with: (string as NSString).substring(with: range).uppercased())
}
return result
}
}
Original câu trả lời:
- (NSAttributedString *)upperCaseAttributedStringFromAttributedString:(NSAttributedString *)inAttrString {
// Make a mutable copy of your input string
NSMutableAttributedString *attrString = [inAttrString mutableCopy];
// Make an array to save the attributes in
NSMutableArray *attributes = [NSMutableArray array];
// Add each set of attributes to the array in a dictionary containing the attributes and range
[attrString enumerateAttributesInRange:NSMakeRange(0, [attrString length]) options:0 usingBlock:^(NSDictionary *attrs, NSRange range, BOOL *stop) {
[attributes addObject:@{@"attrs":attrs, @"range":[NSValue valueWithRange:range]}];
}];
// Make a plain uppercase string
NSString *string = [[attrString string]uppercaseString];
// Replace the characters with the uppercase ones
[attrString replaceCharactersInRange:NSMakeRange(0, [attrString length]) withString:string];
// Reapply each attribute
for (NSDictionary *attribute in attributes) {
[attrString setAttributes:attribute[@"attrs"] range:[attribute[@"range"] rangeValue]];
}
return attrString;
}
Điều này không:
NSString
.
Cảm ơn cho các giải pháp. – AmitSri
Bạn được chào đón. – spudwaffle
Mã không chính xác. Nó có thể tạo ra các chuỗi được phân bổ trong đó các thuộc tính bị tắt bởi một vài ký tự và thậm chí nó có thể sụp đổ. Cách tiếp cận này phụ thuộc vào chuỗi ban đầu và chuỗi trên có cùng số ký tự. Nhưng theo [tài liệu] (https://developer.apple.com/reference/foundation/nsstring/1409855-uppercased) "Biến đổi trường hợp không được đảm bảo đối xứng hoặc để tạo ra các chuỗi có cùng độ dài như bản gốc. ". – fluidsonic