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

Posted

技术标签:

【中文标题】选择 UITableView 中的行时如何清除文本字段?【英文标题】:How to clear textfield when row in UITableView is selected? 【发布时间】:2015-07-17 16:42:32 【问题描述】:

我有一个表格,它在用户有光标的地方输入字符串(从表格的单元格标签) - 所以它的功能就像一个键盘,用字符串作为键而不是单个字符。

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

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

注意要插入的字符串大小不一。

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢谢,但这似乎不起作用。你在哪里定义 lastRow (它的初始值是什么)?退格技术也不适合我。 @vk2015 lastRow 只是一个实例字段,它在viewDidLoad 或当您的表视图“出现”并开始允许交互(要选择的行)时将其值设置为(为-1)。 谢谢!想通了,但无法使您的退格技术起作用-我发布的上述答案似乎对我有用。感谢您的帮助!【参考方案2】:

这段代码对我有用 - 类似于上面的评论,但使用 deleteBackward 方法,加上它在选择两次时取消突出显示该行。需要在类开始时定义 lastRow = -1。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

    var string = buttonTitles[indexPath.row]
    var stringLength = count(string)

    if lastRow == indexPath.row 
        for i in 1...stringLength 
            (textDocumentProxy as! UIKeyInput).deleteBackward()
        
        self.tableView.deselectRowAtIndexPath(indexPath, animated: false)
        lastRow = -1
     else 
        (textDocumentProxy as! UIKeyInput).insertText("\(string)")
        lastRow = indexPath.row
    


func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) 
    var string = buttonTitles[indexPath.row]
    var stringLength = count(string)
    for i in 1...stringLength 
        (textDocumentProxy as! UIKeyInput).deleteBackward()
    

【讨论】:

以上是关于选择 UITableView 中的行时如何清除文本字段?的主要内容,如果未能解决你的问题,请参考以下文章

UITableView,UILabel 文本颜色在选择行时没有改变? [关闭]

添加/删除 UITableView 行时如何防止文本字段变空?

选择行后Tableview不会重新加载数据

当 VC 从另一个 VC 返回时,如何清除 UITableVIew 中的所有检查?

选择行时 UITableView 崩溃

在 UITableView 中选择行时变量不更新