ios - unir - excel concatenar celdas con separador
¿Cómo puedo concatenar NSAttributedStrings? (7)
Prueba esto:
NSMutableAttributedString* result = [astring1 mutableCopy];
[result appendAttributedString:astring2];
Donde astring1
y astring2
son NSAttributedString
s.
Necesito buscar algunas cadenas y establecer algunos atributos antes de fusionar las cadenas, por lo que tener NSStrings -> Concatenarlas -> Hacer que NSAttributedString no sea una opción, ¿hay alguna forma de concatenar attributeString a otra attributed String?
Puedes probar SwiftyFormat Utiliza la siguiente sintaxis
let format = "#{{user}} mentioned you in a comment. #{{comment}}"
let message = NSAttributedString(format: format,
attributes: commonAttributes,
mapping: ["user": attributedName, "comment": attributedComment])
Si está utilizando Cocoapods, una alternativa a ambas respuestas anteriores que le permiten evitar la mutabilidad en su propio código es utilizar la excelente categoría NSAttributedString+CCLFormat en NSAttributedString
s que le permite escribir algo como:
NSAttributedString *first = ...;
NSAttributedString *second = ...;
NSAttributedString *combined = [NSAttributedString attributedStringWithFormat:@"%@%@", first, second];
Por supuesto, solo usa NSMutableAttributedString
bajo las cubiertas.
También tiene la ventaja adicional de ser una función de formateo completamente desarrollada, por lo que puede hacer mucho más que agregar cadenas juntas.
Si está utilizando Swift, puede simplemente sobrecargar el operador +
para que pueda concatenarlos de la misma manera que concatena cadenas normales:
// concatenate attributed strings
func + (left: NSAttributedString, right: NSAttributedString) -> NSAttributedString
{
let result = NSMutableAttributedString()
result.append(left)
result.append(right)
return result
}
Ahora puedes concatenarlos simplemente agregándolos:
let helloworld = NSAttributedString(string: "Hello ") + NSAttributedString(string: "World")
Swift 3: Simplemente cree un NSMutableAttributedString y anexe las cadenas atribuidas a ellos.
let mutableAttributedString = NSMutableAttributedString()
let boldAttribute = [
NSFontAttributeName: UIFont(name: "GothamPro-Medium", size: 13)!,
NSForegroundColorAttributeName: Constants.defaultBlackColor
]
let regularAttribute = [
NSFontAttributeName: UIFont(name: "Gotham Pro", size: 13)!,
NSForegroundColorAttributeName: Constants.defaultBlackColor
]
let boldAttributedString = NSAttributedString(string: "Warning: ", attributes: boldAttribute)
let regularAttributedString = NSAttributedString(string: "All tasks within this project will be deleted. If you''re sure you want to delete all tasks and this project, type DELETE to confirm.", attributes: regularAttribute)
mutableAttributedString.append(boldAttributedString)
mutableAttributedString.append(regularAttributedString)
descriptionTextView.attributedText = mutableAttributedString
Te recomiendo que uses una única cadena atribuible mutable que sugirió @Linuxios, y aquí hay otro ejemplo de eso:
NSMutableAttributedString *mutableAttString = [[NSMutableAttributedString alloc] init];
NSString *plainString = // ...
NSDictionary *attributes = // ... a dictionary with your attributes.
NSAttributedString *newAttString = [[NSAttributedString alloc] initWithString:plainString attributes:attributes];
[mutableAttString appendAttributedString:newAttString];
Sin embargo, para obtener todas las opciones, también puede crear una única cadena atribuible mutable, hecha a partir de un NSString formateado que contenga las cadenas de entrada ya ensambladas. Luego puede usar addAttributes: range:
para agregar los atributos después del hecho a los rangos que contienen las cadenas de entrada. Sin embargo, recomiendo la forma anterior.
// Immutable approach
// class method
+ (NSAttributedString *)stringByAppendingString:(NSAttributedString *)append toString:(NSAttributedString *)string {
NSMutableAttributedString *result = [string mutableCopy];
[result appendAttributedString:append];
NSAttributedString *copy = [result copy];
return copy;
}
//Instance method
- (NSAttributedString *)stringByAppendingString:(NSAttributedString *)append {
NSMutableAttributedString *result = [self mutableCopy];
[result appendAttributedString:append];
NSAttributedString *copy = [result copy];
return copy;
}