如何在textFieldDidEndEditing中查找正在编辑的tableview?

时间:2017-09-22 07:20:50

标签: ios swift uitableview

我正在使用2 tableviews

textfiled中都有tableviewcell

我在textFieldDidEndEditing获取文本字段的文本,但我怎么知道正在编辑的文本属于哪个tableview,我只想知道我可以区分来自textfield的文本存储在两个不同数组中的条件

func textFieldDidEndEditing(_ textField: UITextField)
{
  //  let indexOf = txtArray.index(of:textField.tag)

    if self.tblAnswer.isEditing
    {
        let indexOf = textField.tag

        if let text = textField.text
        {
            if allAnsText.indices.contains(indexOf)
            {
                allAnsText.remove(at: indexOf)
            }
            if text.isEmpty
            {
                print("Write some text there")
            }
            else
            {
            allAnsText.insert(text, at: indexOf)
            print(allAnsText)
            }
        }
    }
    else if self.tblVideo.isEditing
    {
        let indexOf = textField.tag

        if let text = textField.text
        {
            if allMediaText.indices.contains(indexOf)
            {
                allMediaText.remove(at: indexOf)
            }
            if text.isEmpty
            {
                print("Write some text there")
            }
            else
            {
                allMediaText.insert(text, at: indexOf)
                print(allMediaText)
            }
        }

    }

}

2 个答案:

答案 0 :(得分:0)

Swift 3.x

假设您的textFiled层次结构为:

TextField->细胞> TableView中

textFieldDidEndEditing

中写下这行代码
print(textField.superview?.superview)
if textField.superview?.superview == myTable1 {

}
else if textField.superview?.superview == myTable2 {

}
else {

}

答案 1 :(得分:0)

忘记遍历视图层次结构;它容易出错,未来确切的细节可能会发生变化(并严重破坏你的应用程序)。

原始答案(后代)

相反,试试这个:

  1. 获取文本字段在屏幕上的位置:

    // Center on text field's own coordinate system
    let position = textField.frame.center
    
    // Center on Window's coordinate system
    let positionOnWindow = textField.convert(position, to: nil)
    
  2. 将该点转换为表格视图的坐标系,看它是否对应一行:

    let positionInTable = tableView1.convert(positionOnWindow, from: nil)</strike>
    
    if let indexPath = tableView1.indexPathForRow(at: positionInTable) {
        // Text field is inside a row of table view 1
    } else {
        // Otherwise
    }
    
  3. 注意:以上代码未经测试。可能包含编译器错误。

    假设两个代码片段在同一个类(您的表视图委托,数据源和文本字段委托)上运行,那么传递positionOnWindow的值应该没有问题(它可以全部发生在文本字段委托中)法)。

    更好的答案

    正如@rmaddy在评论中正确指出的那样,上面的代码太迂回;你可以直接获得这个职位:

    let positionInTable = tableView1.convert(textField.frame.center, from: textField)
    

    (无需前往窗口的坐标系并返回)