我正在使用Swift 4,使用Xcode 9.2。
我有一个UILabel
,它在.attributedText
属性中与NSMutableAttributedString
相关联。事实上,这个NSMutableAttributedString
是由两个不同NSMutableAttributedString
的串联组成的,每个人都有不同的属性。
由于使用append()
我将所有NSMutableAttributedString
合并到一个可变字符串中,如何在追加所有内容之前检索我之前设置的属性范围(可能无法完成)?或者,有一种方法可以在NSMutableAttributedString
内放置UILabel.attributedText
以上的内容?或者,我是否可以在不使用UILabel
的情况下获得此行为(例如,可能使用UITextView
)?
这是我遇到的问题,因为我需要添加一个UISwitch
隐藏(=将其恢复为默认黑色)并再次显示此foregroundColor
的{{1}},但由于此字符串中只有一部分具有NSMutableAttributedString
属性,因此我不能简单地将该属性应用于整个字符串。
这是代码:
foregroundColor
我想到了这个func attributedTest (_ testString : String)
{
// the first NSMutableAttributedString created
let firstString = NSMutableAttributedString(
string: testString,
attributes: [NSAttributedStringKey.font : UIFont(
name: "Futura",
size: 20.0)!])
// the second NSMutableAttributedString created, they're equal
let secondString = NSMutableAttributedString(
string: testString,
attributes: [NSAttributedStringKey.font : UIFont(
name: "Futura",
size: 20.0)!])
// here I'm adding the attributed on test2
// the NSRange, in this case, is equal to the whole string
secondString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSRangeFromString("0, \(testString.count)"))
// here I'm appending the second string to the first one
firstString.append(secondString)
// here I'm setting the testLabel.attributedText
testLabel.attributedText = test
}
的简单副本,根本没有属性(NSMutableAttributedString
在属性的外部,所以我并不担心),存储在某个地方。可以拥有这两个字符串,并在需要时通过UIFont
切换它们是一个不错的解决方案(尽管不是最佳的)?
谢谢!
答案 0 :(得分:0)
试试这个
NSMutableAttributedString *mutableAttStr = [[NSMutableAttributedString alloc] init];
NSString *str = @"your string here";
NSDictionary *attributes = @{NSForegroundColorAttributeName : [UIColor redColor]};
NSAttributedString *newAttStr = [[NSAttributedString alloc] initWithString:str attributes:attributes];
[mutableAttStr appendAttributedString:newAttStr];
testLabel.attributedText = mutableAttStr;