J'ai besoin de rechercher certaines chaînes et de définir certains attributs avant de fusionner les chaînes, donc avoir NSStrings -> Concaténer les -> Faire NSAttributedString n'est pas une option, y a-t-il un moyen de concaténer attributedString à un autre attributedString ?
Réponses
Trop de publicités?Je vous recommande d'utiliser une seule chaîne attribuée mutable comme l'a suggéré @Linuxios, et voici un autre exemple de cela :
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];
Cependant, juste pour avoir toutes les options possibles, vous pourriez aussi créer une seule chaîne attribuée mutable, faite à partir d'une NSString formatée contenant les chaînes d'entrée déjà assemblées. Vous pourriez alors utiliser addAttributes: range:
pour ajouter les attributs après coup aux plages contenant les chaînes d'entrée. Je recommande toutefois la première méthode.
Si vous utilisez Swift, vous pouvez simplement surcharger la fonction +
afin que vous puissiez les concaténer de la même manière que vous concaténiez des chaînes de caractères 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 : Il suffit de créer une NSMutableAttributedString et d'y ajouter 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
swift5 upd :
let captionAttribute = [
NSAttributedString.Key.font: Font.captionsRegular,
NSAttributedString.Key.foregroundColor: UIColor.appGray
]
2020 | SWIFT 5.1 :
Vous êtes en mesure d'ajouter 2 NSMutableAttributedString
de la manière suivante :
let concatenated = NSAttrStr1.append(NSAttrStr2)
Une autre façon de travailler avec NSMutableAttributedString
y NSAttributedString
les deux :
[NSAttrStr1, NSAttrStr2].joinWith(separator: "")
Une autre façon de procéder est d'utiliser ....
var full = NSAttrStr1 + NSAttrStr2 + NSAttrStr3
et :
var full = NSMutableAttributedString(string: "hello ")
// NSAttrStr1 == 1
full += NSAttrStr1 // full == "hello 1"
full += " world" // full == "hello 1 world"
Vous pouvez le faire avec l'extension suivante :
// works with NSAttributedString and NSMutableAttributedString!
public extension NSAttributedString {
static func + (left: NSAttributedString, right: NSAttributedString) -> NSAttributedString {
let leftCopy = NSMutableAttributedString(attributedString: left)
leftCopy.append(right)
return leftCopy
}
static func + (left: NSAttributedString, right: String) -> NSAttributedString {
let leftCopy = NSMutableAttributedString(attributedString: left)
let rightAttr = NSMutableAttributedString(string: right)
leftCopy.append(rightAttr)
return leftCopy
}
static func + (left: String, right: NSAttributedString) -> NSAttributedString {
let leftAttr = NSMutableAttributedString(string: left)
leftAttr.append(right)
return leftAttr
}
}
public extension NSMutableAttributedString {
static func += (left: NSMutableAttributedString, right: String) -> NSMutableAttributedString {
let rightAttr = NSMutableAttributedString(string: right)
left.append(rightAttr)
return left
}
static func += (left: NSMutableAttributedString, right: NSAttributedString) -> NSMutableAttributedString {
left.append(right)
return left
}
}
- Réponses précédentes
- Plus de réponses