选择 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 行时如何防止文本字段变空?