在合并字符串之前,我需要搜索一些字符串并设置一些属性,因此不能使用NSStrings ->连接它们->制作NSAttributedString的选项,有没有办法将attributedString连接到另一个attributedString中?
在合并字符串之前,我需要搜索一些字符串并设置一些属性,因此不能使用NSStrings ->连接它们->制作NSAttributedString的选项,有没有办法将attributedString连接到另一个attributedString中?
我建议你像@Linuxios建议的那样使用一个可变的属性字符串,这里提供另一个示例:
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];
然而,为了列举所有选项,你也可以创建一个可变的属性字符串,该字符串由一个包含已经组合好的输入字符串的格式化NSString创建。然后,您可以使用addAttributes:range:
在包含输入字符串的范围之后添加属性。尽管如此,我还是推荐前一种方式。
+
运算符,以便你可以像连接普通字符串一样连接它们。
如果您使用Swift,则可以重载 +
运算符,以便可以像连接普通字符串一样连接它们:
// concatenate attributed strings
func + (left: NSAttributedString, right: NSAttributedString) -> NSAttributedString
{
let result = NSMutableAttributedString()
result.append(left)
result.append(right)
return result
}
现在您可以通过将它们添加在一起来连接它们:
let helloworld = NSAttributedString(string: "Hello ") + NSAttributedString(string: "World")
return NSAttributedString(attributedString: result)
。 - AlexHelpers
或 Extensions
的文件夹,并将此函数放在名为 NSAttributedString+Concatenate.swift
的文件中。 - David LawsonSwift 3:只需创建一个NSMutableAttributedString并将属性字符串附加到其中即可。
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更新:
let captionAttribute = [
NSAttributedString.Key.font: Font.captionsRegular,
NSAttributedString.Key.foregroundColor: UIColor.appGray
]
试一下这个:
NSMutableAttributedString* result = [astring1 mutableCopy];
[result appendAttributedString:astring2];
astring1
和astring2
是NSAttributedString
。
[[aString1 mutableCopy] appendAttributedString: aString2]
。意思是将字符串aString2追加到aString1后面,并创建一个可变的字符串对象来完成操作。 - JWWalkerNSMutableAttributedString* aString3 = [aString1 mutableCopy]; [aString3 appendAttributedString: aString2];
。 - JWWalker2020年| SWIFT 5.1:
您可以通过以下方式添加2个NSMutableAttributedString
:
let concatenated = NSAttrStr1.append(NSAttrStr2)
另一种方法使用NSMutableAttributedString
和NSAttributedString
:
[NSAttrStr1, NSAttrStr2].joinWith(separator: "")
另外一种方式是....
var full = NSAttrStr1 + NSAttrStr2 + NSAttrStr3
和:
var full = NSMutableAttributedString(string: "hello ")
// NSAttrStr1 == 1
full += NSAttrStr1 // "hello 1"
full += " world" // "hello 1 world"
您可以使用以下扩展程序来完成此操作:
// 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
}
}
NSAttrStr1.append(NSAttrStr2)
。 - Andrew_STOP_RU_WAR_IN_UANSAttributedString
。NSAttributedString *first = ...;
NSAttributedString *second = ...;
NSAttributedString *combined = [NSAttributedString attributedStringWithFormat:@"%@%@", first, second];
当然,它只是在底层使用了NSMutableAttributedString
。
它还具有完整的格式化功能,因此它可以做比仅追加字符串更多的事情。
// 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;
}
你可以尝试使用SwiftyFormat。它使用以下语法。
let format = "#{{user}} mentioned you in a comment. #{{comment}}"
let message = NSAttributedString(format: format,
attributes: commonAttributes,
mapping: ["user": attributedName, "comment": attributedComment])
private var fillAttributes:[NSMutableAttributedString.Key : Any]? = nil
fontAttributes = [.foregroundColor : SKColor.red,
.strokeWidth : 0.0,
.font : CPFont(name: "Verdana-Bold",
.size : 50,]
fontAttributes.updateValue(SKColor.green, forKey: .foregroundColor)