在iOS中需要searchText荧光笔

时间:2018-12-26 12:40:33

标签: ios swift

我正在使用“ 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

1 个答案:

答案 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()
}

您应该在搜索后更改html中的字体和大小。 result

希望这会有所帮助