我正在使用“ UITextField”作为SEARCHBOX的应用程序中工作。当用户在uitextfield UiTableView中输入带有部分的搜索文本时,将显示结果,但是我需要突出显示在tableview的textfield中输入的文本。我使用了属性文本,但是只能在一定范围内使用。因此,请帮助我实现荧光笔的想法。
myMutableString = NSMutableAttributedString(string: contactsList.familyName + contactsList.givenName, attributes: [NSAttributedStringKey.font:UIFont(name: "Catamaran", size: 14.0)!])
if contactsList.familyName.count >= 4 {
myMutableString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.black, range: NSRange(location:0,length:4))
}else {
myMutableString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.black, range: NSRange(location:0,length:2))
}
cell?.profileName.attributedText = myMutableString
答案 0 :(得分:1)
我试图更改前景色,但它只是更改了文本颜色,而不是背景色。 我不知道这是否是正确的解决方案,但是您可以尝试这样的方法。
如果我正确理解您的问题, highlihted textfield
全局添加标签
let label = UILabel()
在viewDidLoad中设置标签框架
label.frame.size = CGSize(width: 10, height: textfield.frame.size.height)// your settings width should be 10 or smaller
label.font = UIFont(name: "Halvetica", size: 14)
label.backgroundColor = UIColor.red
将文本字段文本颜色设置为文本字段背景颜色
textfield.textColor = UIColor.white
添加像这样的textFieldEditingChanged方法:
@IBAction func changed(_ sender: Any) {
label.removeFromSuperview()
label.text = textfield.text
textfield.addSubview(label)
label.sizeToFit()
}
不要忘记将标签和文本字段字体设置为相同。如果不这样做,文本字段光标可能会出现在标签的后面或前面
更新: 您应该使用html
创建属性字符串extension String {
var html2AttributedString: NSAttributedString? {
do {
return try NSAttributedString(data: Data(utf8),
options: [.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue],
documentAttributes: nil)
} catch {
print("error: ", error)
return nil
}
}
var html2String: String {
return html2AttributedString?.string ?? ""
}// you can find several way to do this just google it
}
数据源:
var dataSource = ["foo","foo1","foo2","foo3","foo4","foo5","foo6"]
为数据源字符串范围内的找到的结果索引创建变量
var indexes : [Int:Range<String.Index>] = [:]
cellForRowAt:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let string = dataSource[indexPath.row]
cell.textLabel?.attributedText = string.html2AttributedString
return cell
}
searchText编辑更改:
@IBAction func change(_ sender: UITextField) {
indexes.removeAll()
dataSource = ["foo","foo1","foo2","foo3","foo4","foo5","foo6"] // assign datasource again
for i in 0..<dataSource.count {
if let textRange = dataSource[i].range(of: textField.text!) {
indexes[i] = textRange
}
}
for (index,entry) in indexes {
let highlighted = "<text style='background-color:#FFFF00';>\(dataSource[index][entry])</text>"
dataSource[index].replaceSubrange(entry, with: highlighted)
}
tableView.reloadData()
}
希望这会有所帮助