在String Swift中带下划线的搜索文本
我正在尝试在字符串内部制作大胆和下划线的搜索文本。我已经尝试了这个解决方案,但这只是给我一个错误。
这是我的配置
func configure(model: SmartSearchGroupViewModel, searchedKey: String) {
let boldUnderlined = NSAttributedString(string: searchedKey, attributes: [.font: UIFont.sfProTextBold(size: 15), .underlineStyle: NSUnderlineStyle.single.rawValue])
let content = NSMutableAttributedString.init(string: model.name)
content.addAttribute(NSAttributedString.Key.font, value: UIFont.sfProTextRegular(size: 15), range: NSRange.init(location: 0, length: content.length))
if model.name.substring(from: 0) == searchedKey.substring(from: 0) {
content.addAttribute(NSAttributedString.Key.underlineStyle, value: 1, range: NSRange.init(location: 0, length: boldUnderlined.string.count))
}
groupNameLabel.attributedText = content
}
,但我会有一个错误
无法将'int'类型的值转换为预期参数类型'string.index'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以这样做:
首先初始化具有默认属性的属性字符串:
然后,为了添加搜索的特殊效果,您可以使用:
解决方案1:
solution2
: solution1&解决方案2,是使用
range(of:)
应用于nsstring
或String
,它将输出nsrange 或<代码>范围
。由于nsattributedString
使用nsrange
,解决方案可能是“更快”的。附带注意,如果您还想搜索非案例敏感性,则可以使用
.range(of:of:searchedkey,options:.caseinsentive)
(甚至放置本地参数:.range。 (of:searchedkey,选项:.caseinsentive,locale:.current)
。小心nsfoundation中的
length
的计数可能是相同的。 /代码>直接。This could be done like this:
First initialize the attributed string with default attributes:
Then, to add special effects for search, you can use:
Solution 1:
Solution2:
The difference between Solution1 & Solution2, is the use of
range(of:)
applied on aNSString
or aString
, it will output aNSRange
or aRange
. SinceNSAttributedString
usesNSRange
, solution one might be "quicker" to write.Side note, if you also want to search for non-case sensitive, you can use
.range(of: searchedKey, options: .caseInsensitive)
(and even put the local parameter:.range(of: searchedKey, options: .caseInsensitive, locale: .current)
.I noticed on your code
NSRange.init(location: 0, length: boldUnderlined.string.count)
, be careful the count on Swift might no be the same oflength
in NSFoundation. Ie UTF8 vs UTF16 counting. So usestring.utf16.count
instead, orlength
directly.