Je dois rechercher certaines chaînes et définir certains attributs avant de les fusionner. NSStrings -> Concatenate -> Make NSAttributedString n'est donc pas une option. Existe-t-il un moyen de concaténer attributString à un autre attributString?
Je vous recommande d'utiliser une seule chaîne d'attributs mutables, suggérée par @Linuxios, et voici un autre exemple:
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];
Toutefois, pour obtenir toutes les options, vous pouvez également créer une seule chaîne d'attribut modifiable, constituée d'un NSString formaté contenant les chaînes d'entrée déjà assemblées. Vous pouvez ensuite utiliser addAttributes: range:
pour ajouter les attributs après coup aux plages contenant les chaînes en entrée. Je recommande cependant l'ancienne méthode.
Si vous utilisez Swift, vous pouvez simplement surcharger l'opérateur +
afin de pouvoir les concaténer de la même manière que vous concaténez des chaînes normales:
// concatenate attributed strings
func + (left: NSAttributedString, right: NSAttributedString) -> NSAttributedString
{
let result = NSMutableAttributedString()
result.append(left)
result.append(right)
return result
}
Maintenant, vous pouvez les concaténer simplement en les ajoutant:
let helloworld = NSAttributedString(string: "Hello ") + NSAttributedString(string: "World")
Swift 3: Créez simplement une chaîne NSMutableAttributedString et ajoutez-leur les chaînes attribuées.
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
Essaye ça:
NSMutableAttributedString* result = [astring1 mutableCopy];
[result appendAttributedString:astring2];
Où astring1
et astring2
sont NSAttributedString
s.
Si vous utilisez Cocoapods, une alternative aux deux réponses ci-dessus vous permettant d'éviter la mutabilité dans votre propre code est d'utiliser l'excellent NSAttributedString + CCLFormat catégorie sur NSAttributedString
s qui vous permet d'écrire quelque chose comme :
NSAttributedString *first = ...;
NSAttributedString *second = ...;
NSAttributedString *combined = [NSAttributedString attributedStringWithFormat:@"%@%@", first, second];
Bien sûr, il utilise simplement NSMutableAttributedString
sous les couvertures.
Elle présente également l’avantage supplémentaire d’être une fonction de formatage à part entière - elle peut donc faire beaucoup plus que l’ajout de chaînes ensemble.
Vous pouvez essayer SwiftyFormat Il utilise la syntaxe suivante
let format = "#{{user}} mentioned you in a comment. #{{comment}}"
let message = NSAttributedString(format: format,
attributes: commonAttributes,
mapping: ["user": attributedName, "comment": attributedComment])
// 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;
}