online for features compilador swift xcode drag-and-drop storyboard interface-builder

swift - for - No se puede arrastrar la acción del botón a la función existente en Xcode 8



xcode online (9)

Cambiar remitente de Any a AnyObject funciona para mí

Tengo un problema extraño con Xcode 8. Cuando intento presionar ctrl + arrastrar el botón a la función existente, no puedo, solo puedo crear una nueva salida o acción. Lo que es más extraño es que, incluso cuando creo una acción con ctrl + arrastrar, no puedo conectar el evento al mismo botón que usé para crear la acción. El icono IB también está en blanco, ya que no hay conexión entre la acción y el botón, pero el clic en tiempo real ejecuta la acción. Por otro lado, cuando trato de conectar la acción al botón de swift al guión gráfico, puedo (el icono @IB se vuelve "completo"), pero luego aparece una excepción al hacer clic en el selector no reconocido myActionWithSender


En mi caso, se me abrió un guión gráfico similar. Una vez que lo cerré y luego, hice clic en el botón una vez para ver los bloques alrededor de él para alinearlo. - Luego haga clic derecho y lo arrastró al ViewController. - Por último, haga clic / toque en el lugar donde desea colocar el bloque de código del evento dentro del ViewController.


En mi caso, tendrá que cambiar Any a UIButton. Debe ser específico que la acción que viene de UIButton.

@IBAction func buttonClicked(_ sender: UIButton) { }


En mi versión de Xcode, IBAction se crea automáticamente con el parámetro "Cualquier", en lugar de "Cualquier Objeto". Crear IBAction explícitamente con UIButton funcionó para mí.


En su cambio de archivo .swift:

@IBAction func buttonClicked(sender: UIButton) { // Do something }

a

@IBAction func buttonClicked(z sender: UIButton) { // Do something }

Solo agrega esa pequeña ''z'' (o la etiqueta que quieras). Intenté un guión bajo ''_'', y eso también funciona, pero da una advertencia, así que solo use una ''z'' en lugar de evitar la advertencia.

Creo que es un error en Xcode 8. En algún lugar (probablemente IB) está esperando un código compatible con Swift 3 donde el primer parámetro DEBE tener una etiqueta. Entonces, cuando ve la palabra "remitente", asume (erróneamente) que esa es la etiqueta. Así que agregar una etiqueta (''z'' en mi caso) hace que todos estén contentos.

Swift 2.3 no requiere una etiqueta. Swift 3 hace. Entonces, como señaló Jaroslaw, la actualización de 2.3 a 3.0 también solucionará este problema. Pero si su proyecto está atascado en 2.3, solo agregar una etiqueta parece hacer el truco.


Haga clic en el botón UIB, luego vaya a "Inspector de conexiones" en el área Utilidades.

Haga clic en el círculo vacío al lado del evento y arrastre la línea hacia el cuerpo de la función.


Incluso en Swift 3, le gustaría cambiar el argumento de @IBAction de (_ sender: Any) a (_ sender: UIButton) o ( _ sender: AnyObject) , pero manualmente.

Podría funcionar.


Para solucionarlo, tuve que actualizar el lenguaje de mi proyecto a Swift 3.0 desde Swift 2.3


haga clic con el botón derecho del ratón en la función de botón abierto en seleccionar retoque dentro para arrastrar ... debe intentar esto ...