如何在选择UITableView中的行时清除文本字段?

时间:2015-07-17 16:42:33

标签: ios swift uitableview cocoa-touch

我有一个表格,在用户有光标的地方输入一个字符串(来自表格的单元格标签) - 所以函数就像一个键盘,键盘而不是单个字符。

如果用户点击同一行两次,或者在选择第一行后点击另一行,我希望能够从用户所在的任何文本字段中删除相同的字符串(例如,Safari地址栏)。

下面的代码在首次单击行时插入文本 - 如何在单击行两次或选择其他行时删除该确切文本?

请注意,要插入的字符串都是不同的大小。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        var string = buttonTitles[indexPath.row]
        (textDocumentProxy as! UIKeyInput).insertText("\(string)")
}

2 个答案:

答案 0 :(得分:0)

使用变量来跟踪最后按下的行。调用didSelectRowAtIndexPath时,将新行(来自参数)与变量进行比较,如果它们相同,则删除该单词,如果它们不同,则删除该单词并添加新单词。

可能类似下面的代码。不确定退格技术是否有效,但是要尝试一下。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
    let newText = "\(buttonTitles[indexPath.row])"
    let oldText = "\(buttonTitles[lastRow])"
    var stringToAdd = ""

    //only delete the text if a row has already been selected
    if lastRow != -1      //-1 is a default value meaning there is no last row
    {
        //delete the old word
        for i in 0 ..< oldText.length
        {
            stringToAdd += "\b"      //add backspace characters to remove the old word
        }
    }

    //add the new word
    if indexPath.row != lastRow
    {
        stringToAdd += rowText
    }

    (textDocumentProxy as! UIKeyInput).insertText(stringToAdd)

    lastRow = indexPath.row
}

答案 1 :(得分:0)

此代码对我有用 - 类似于上面的注释,但使用了deleteBackward方法,而且当选择两次时,它会取消突出显示该行。需要在类的开头定义lastRow = -1。

HList