¿Cuál es el propósito de usar IBAction e IBOutlet en la codificación Objective-C para el iPhone, ¿hay alguna diferencia si no los uso?IBOutlet e IBAction
Respuesta
IBAction
y IBOutlet
son macros definidas para indicar variables y métodos a los que se puede hacer referencia en el Generador de interfaces.
IBAction
resuelve a void
y IBOutlet
resuelve nada, pero que significan a constructor de Xcode e interfaz que estas variables y métodos se pueden utilizar en constructor de interfaz para unir elementos de la interfaz de su código.
Si no vas a utilizar Interface Builder en absoluto, entonces no los necesitas en tu código, pero si vas a usarlo, entonces debes especificar IBAction
para los métodos que se usarán en IB y IBOutlet
para objetos que se utilizarán en IB.
@Jasarien "debe especificar IBAction para los métodos que se utilizarán en IB e IBOutlet para los objetos que se utilizarán en IB." ¿Cuál es la diferencia? – cyrilchampier
@nerith La misma diferencia que existe entre métodos y objetos. IBAcciones para métodos, IBOutlet para objetos. – Jasarien
Solo para aclarar, ya que mi publicación fue editada, 'IBOutlet' no se resuelve en' id'. Considere esto: 'IBOutlet UILabel * nameLabel;' - si 'IBOutlet' resolvió' id', entonces ese código leería 'id UIlabel * namelabel;' que produce un error de compilación. Como dije originalmente, 'IBOutlet' no resuelve nada. – Jasarien
Debe usar IBOutlet e IBAction si está utilizando el constructor de interfaces (de ahí el prefijo IB) para sus componentes de la 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, supongamos que define un botón y una etiqueta en IB. Para cambiar dinámicamente el valor de la etiqueta pulsando el botón, definirá una acción y propiedad en su aplicación similar a:
UILabel IBOutlet *myLabel;
-(IBAction) pushme;
Luego, en IB que conectaría myLabel con la etiqueta y conecte el método pushme con el botón. Necesita IBAction e IBOutlet para que estas conexiones existan en IB.
, pero ¿por qué __sta funciona__ si no incluye el etiquetado IBOutlet ..? – bobobobo
Dado que estas macros no hacen nada en tiempo de compilación, son simplemente para que la aplicación de compilación de interfaz pueda encontrar esos métodos y archivos de compilador de interfaz en el código fuente para que pueda arrastrar entre el constructor de interfaz y su código, uno establece que la conexión no funciona importa más –
IBAction no hace nada en el tiempo de edición, tampoco, durante al menos la última década. También puede conectar un método '(void)' en Interface Builder. –
IBAction y IBOutlets se utilizan para conectar su interfaz hecha en Interface Builder con su controlador. Si no usa Interface Builder y construye su interfaz completamente en código, podría crear un programa sin usarlo. Pero en realidad, la mayoría de nosotros usamos el Interface Builder, una vez que desee obtener algo de interactividad en su interfaz, deberá usar IBActions y IBoutlets.
Interface Builder los usa para determinar qué miembros y mensajes pueden 'conectarse' a los controles de interfaz que está utilizando en su ventana/vista.
IBOutlet y IBAction son puramente como marcadores que Interface Builder busca cuando analiza el código en tiempo de diseño, no tienen ningún efecto sobre el código generado por el compilador.
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 su lugar (IBAction es # define'd para ser nulo), y proporciona un argumento (id), el método aún es visible. Esto proporciona mayor flexibilidad, al
Todos los 3 de ellos son visibles desde el Interface Builder:
-(void) someMethod1:(id) sender;
-(IBAction) someMethod2;
-(IBAction) someMethod3:(id) sender;
Ver Guía del usuario de Interface Builder de Apple para obtener más información, en particular la sección titulada Integración Xcode.
Aquí hay un enlace a la guía anterior sugerida: https://developer.apple.com/library/ios/recipes/xcode_help-interface_builder/_index.html – Aggressor
Un Outlet es un enlace del código a la IU. Si desea mostrar u ocultar un elemento UI, si desea obtener el texto de un campo de texto o habilitar o deshabilitar un elemento (u otras cien 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: método especial desencadenado por objetos de interfaz de usuario. Interface Builder los reconoce.
@interface Controller
{
IBOutlet id textField; // links to TextField UI object
}
- (IBAction)doAction:(id)sender; // e.g. called when button pushed
Para más información, consulte Apple Docs
Uhm, no, eso no es lo que es un IBOutlet. ¿De dónde sacaste esa idea? –
He editado mi respuesta –
cuando se utiliza el Interface Builder, se puede utilizar conexiones inspector de configurar los eventos con los manejadores de eventos, se supone que los controladores de eventos a ser las funciones que tienen el IBAction modificador Una vista se puede vincular con la referencia para el mismo tipo y con el modificador IBOutlet.
Apareció en 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 puede ver que IBOutlets solo están allí para hacer coincidir el nombre de la propiedad con un nombre de control en el archivo Nib.
Esta respuesta explica _why_ y _how_ IBOutlets funcionan, no solo _ lo que hacen_. –
- 1. ¿Qué significa IB en IBAction, IBOutlet, etc.?
- 2. ¿Resumen de todas las conexiones IBOutlet, IBAction en un proyecto?
- 3. cómo conectarse a IBOutlet o IBAction en la clase base
- 4. EXC_BAD_ACCESS con IBACTION
- 5. declaraciones de IBOutlet?
- 6. Send An Action Cocoa - IBAction
- 7. ¿Podemos definir un IBOutlet privado?
- 8. IBOutlet y viewDidUnload bajo ARC
- 9. IBOutlet no se conecta en Interface Builder- Xcode 4.2
- 10. débil o fuerte para IBOutlet y otros
- 11. Pase diferentes parámetros a un IBAction
- 12. Obtener texto de botón desde IBAction - iPhone
- 13. Razones para que un IBOutlet sea nulo
- 14. IBOutlet no está conectado en awakeFromNib
- 15. ¿Se puede codificar IBActions y IBOutlet en lugar de arrastrarlas manualmente en Interface Builder?
- 16. ¿Por qué mi IBOutlet se lanza bajo ARC?
- 17. Remitente de transmisión a IBAction como identificación o clase específica
- 18. UIButton creado programáticamente. ¿Cómo envío los retoques a un IBAction?
- 19. iOS: ¿Incluye el remitente en la declaración de IBAction?
- 20. Manejando evento Touch en UILabel y conectándolo a un IBAction
- 21. Convenciones de nomenclatura sobre las funciones de IBAction
- 22. ¿Necesita un IBOutlet ser una propiedad y sintetizado?
- 23. Variables de instancia de IBOutlet en archivos de implementación (.m)
- 24. ¿Puedo conectar varios objetos con etiquetas diferentes al mismo IBOutlet?
- 25. ¿Cómo hacer una prueba unitaria de las conexiones de IBOutlet?
- 26. ¿Cómo hacer que IBOutlet salga de una matriz de objetos?
- 27. asignación NSString e inicializar
- 28. IOS CS193p: ¿Por qué la conexión de IBAction se arrastró al archivo .m y no a .h?
- 29. Las instancias de IBOutlet son (nulas) después de cargar desde NIB
- 30. función (e) {e.algo ...} ¿Qué es e?
Todas las respuestas mencionan el mismo tipo de idea .. pero nadie explica por qué Interface Builder parece funcionar de la misma manera si NO incluir IBAction/IBOutlet en su fuente. ¿Hay alguna otra razón para IBAction e IBOutlet o es __ok dejarlos desactivados__? – bobobobo
La respuesta de Michael Rogers a continuación agrega un poco de una explicación sobre por qué el código funciona incluso cuando IBAction se omite. – Krishna
Las interacciones de IB existen como parte del mecanismo de interacción de acción de objetivo, puede leer acerca de cómo encaja IBAction en esto aquí: https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/Target-Action/ Target-Action.html # // apple_ref/doc/uid/TP40010810-CH12 Puede leer en Outlets aquí: https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/Outlets /Outlets.html#//apple_ref/doc/uid/TP40010810-CH10-SW1 –