¿Cuál es el propósito de usar IBOutlets e IBActions en Xcode e Interface Builder?
¿Hay alguna diferencia si no uso IBOutlets e IBActions?
Rápido:
@IBOutlet weak var textField: UITextField!
@IBAction func buttonPressed(_ sender: Any) { /* ... */ }
C objetivo:
@property (nonatomic, weak) IBOutlet UITextField *textField;
- (IBAction)buttonPressed:(id)sender { /* ... */ }
Respuestas:
IBAction
yIBOutlet
son macros definidas para denotar variables y métodos a los que se puede hacer referencia en Interface Builder.IBAction
resuelvevoid
y noIBOutlet
resuelve nada, pero significan para Xcode y el generador de interfaces que estas variables y métodos pueden usarse en el generador de interfaces para vincular elementos de la interfaz de usuario a su código.Si no va a usar Interface Builder en absoluto, entonces no los necesita en su código, pero si lo va a usar, debe especificar los
IBAction
métodos que se usarán en IB y losIBOutlet
objetos eso se usará en IB.fuente
IBOutlet
no se resuelveid
. Considere esto:IBOutlet UILabel *nameLabel;
si seIBOutlet
resuelveid
, entonces ese código se leería, loid UIlabel *namelabel;
que produce un error del compilador. Como dije originalmente, no seIBOutlet
resuelve nada.La forma tradicional de marcar un método para que aparezca en Interface Builder, y puede arrastrar una conexión a él, ha sido hacer que el método devuelva el tipo IBAction. Sin embargo, si hace que su método sea nulo, en cambio (IBAction es # define'd para ser nulo), y proporciona un argumento (id), el método sigue siendo visible. Esto proporciona flexibilidad adicional, al
Los 3 son visibles desde Interface Builder:
Consulte la Guía del usuario de Interface Builder de Apple para obtener más información, en particular la sección titulada Xcode Integration.
fuente
Debe utilizar IBOutlet e IBAction si está utilizando el creador de interfaces (de ahí el prefijo IB) para sus componentes GUI. IBOutlet es necesario para asociar propiedades en su aplicación con componentes en IB, e IBAction se utiliza para permitir que sus métodos se asocien con acciones en IB.
Por ejemplo, suponga que define un botón y una etiqueta en IB. Para cambiar dinámicamente el valor de la etiqueta presionando el botón, definirá una acción y propiedad en su aplicación similar a:
Luego, en IB, conectaría myLabel con la etiqueta y el método pushme con el botón. Necesita IBAction e IBOutlet para que estas conexiones existan en IB.
fuente
(void)
método en Interface Builder.Interface Builder los usa para determinar qué miembros y mensajes se pueden 'conectar' a los controles de interfaz que está utilizando en su ventana / vista.
IBOutlet e IBAction están simplemente allí como marcadores que Interface Builder busca cuando analiza su código en tiempo de diseño, no tienen ningún efecto en el código generado por el compilador.
fuente
Me encontré con el diagrama mientras miraba la codificación de valores clave, pensé que podría ayudar a alguien. Ayuda a comprender qué es IBOutlet.
Al observar el flujo, se podría ver que IBOutlets solo están allí para hacer coincidir el nombre de la propiedad con un nombre de control en el archivo Nib.
fuente
Un Outlet es un enlace del código a la interfaz de usuario. Si desea mostrar u ocultar un elemento de la interfaz de usuario, si desea obtener el texto de un campo de texto o habilitar o deshabilitar un elemento (o un centenar de otras cosas), debe definir una salida de ese objeto en las fuentes y vincular esa salida a través del "objeto de interfaz" al elemento UI. Después de eso, puede usar la salida como cualquier otra variable en su codificación.
IBAction: un método especial activado por objetos de interfaz de usuario. Interface Builder los reconoce.
Para obtener más información, consulte Documentos de Apple
fuente
IBAction e IBOutlets se utilizan para conectar su interfaz hecha en Interface Builder con su controlador. Si no usara Interface Builder y construyera su interfaz completamente en código, podría hacer un programa sin usarlos. Pero, en realidad, la mayoría de nosotros usamos Interface Builder, una vez que desees que haya cierta interactividad en tu interfaz, tendrás que usar IBActions e IBoutlets.
fuente
IBOutlet
IBAction
@ - Patrón dinámico IB - Interface Builder
fuente
Uno de los principales comentarios sobre esta pregunta específicamente pregunta:
NSHipster responde bien a esta pregunta:
IBAction
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#ibaction
IBOutlet:
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#iboutlet
fuente
cuando usa Interface Builder, puede usar Connections Inspector para configurar los eventos con controladores de eventos, se supone que los controladores de eventos son las funciones que tienen el modificador IBAction. Se puede vincular una vista con la referencia para el mismo tipo y con el modificador IBOutlet.
fuente