Estoy usando 2 tableviews

Ambos tienen textfiled en tableviewcell,

Recibo el texto del campo de texto en textFieldDidEndEditing pero ¿cómo puedo saber que el texto que se está editando pertenece a qué vista de tabla? Solo quiero saber la condición en la que puedo diferenciar el texto que viene del campo de texto para almacenarlo en dos matrices diferentes.

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)
            }
        }

    }

}
1
rahul bandal 22 sep. 2017 a las 10:20

2 respuestas

La mejor respuesta

Olvídese de atravesar la jerarquía de vistas; es propenso a errores y los detalles exactos pueden cambiar en el futuro (y romper su aplicación horriblemente).

Respuesta original (para la posteridad)

En cambio, intente esto:

  1. Obtenga la ubicación del campo de texto en la pantalla:

    // 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. Convierta ese punto al sistema de coordenadas de la vista de tabla y vea si corresponde a una fila:

    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
    }
    

Nota: el código anterior no está probado. Puede contener errores del compilador.

Suponiendo que ambos fragmentos de código se ejecutan en la misma clase (su delegado de vista de tabla, fuente de datos y delegado de campo de texto), no debería haber ningún problema para pasar el valor de positionOnWindow (todo puede suceder dentro del método de delegado de campo de texto).

Mejor respuesta

Como debidamente señaló @rmaddy en los comentarios, el código anterior es demasiado indirecto ; puede obtener directamente el puesto con:

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

(no es necesario el viaje al sistema de coordenadas de la ventana y viceversa)

2
Nicolas Miari 17 dic. 2018 a las 00:44

Swift 3.x

Suponiendo que su jerarquía de campo de texto es:

TextField-> Cell-> TableView

Escribe esta línea de código en textFieldDidEndEditing

print(textField.superview?.superview)
if textField.superview?.superview == myTable1 {

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

}
else {

}
0
Salman Ghumsani 22 sep. 2017 a las 07:32