Pregunta

Saludos,

Tengo un proyecto de aplicación basada vista en la que he creado una clase NSObject llamado "SquareClass". Ahora, desde el constructor de interfaces de Xcode, quiero ser capaz de crear una instancia que "SquareClass" en un objeto cuadrado de ámbito global, de tal manera que, cuando creo acciones de los controles de interfaz de usuario (es decir, cuadros de texto, botones, etc ... ), quiero ser capaz de llamar a los métodos de ese objeto dentro de esas acciones.

ejemplo:

(void)MyAction1:(id)color
{
   [square setColor:color];
}

(void)MyAction2:(id)width
{
   [square setWidth:width];
}

Como se puede ver, el objeto cuadrado debe tener un alcance global. Esto podría parecer fácil o tal vez de manera equivocada de hacerlo para algunos de nosotros. He miro a través de la web, y encontré un poco una manera para que un archivo .nib, no para un archivo .xib.

Cualquier sugerencia sería muy apreciada. Muchas gracias.

Yohann.

PS: Este es mi primer post en ninguna, existirá indulgente

.
¿Fue útil?

Solución

En primer lugar, un archivo SEMILLA es, para todos los efectos, el mismo que un archivo XIB; es sólo una versión compilada de un archivo XI ter.

Ahora, para crear un objeto derivado de NSObject en su SEMILLA / XI ter, basta con arrastrar un NSObject desde la ventana de la biblioteca en su archivo. Luego, en el inspector de identidad cambiar la clase a la clase personalizada.

Si define métodos como éste:

- (IBAction)myAction:(id)sender

serás capaz de engancharlos en Interface Builder.

Una vez dicho todo esto, es difícil decir si lo que está haciendo es lo que hay que ver en absoluto. Me suena como usted debe utilizar una subclase NSViewController así echar un vistazo a la documentación de ese.

También debe asegurarse de que entiende lo que la vista, el controlador y el modelo de objetos. Hay un montón de literatura sobre este.

Otros consejos

Si crea una clase que se extiende UIView, entonces puede presentar propietario del archivo para su xib implementar la clase extendida. A partir de ese momento sólo tiene que añadir una variable de instancia a la clase extendida de la plaza. El último paso en el proceso es añadir métodos a su clase de obligar a cada uno de los controles a las acciones.

- (IBAction) pinSelected: (id)sender;

Una vez que crea estos métodos (asegúrese de hacerles volver IBAction, en realidad es un alias para el vacío, sino que actúa como una sugerencia para el Interface Builder) entonces se puede enlazar los controles para el método a través del propietario del archivo (utilizando el control + arrastrar para establecer el enlace).

Buena suerte!

He encontrado la manera de hacer lo que tenía que no se hace dentro del archivo XI ter. Es la manera más simple de lo que pensaba, apesar de las sugerencias anteriores son válidas.

Con el fin de utilizar el objeto cuadrado, sólo tenía que hacer referencia al archivo de cabecera:

 #import "square.h"

en la SquareUIViewController.h y añadir una referencia a un objeto cuadrado:

Square *square;

A continuación, en el SquareUIController.m, sólo tengo que asignar / inicializar el objeto cuadrado antes de hacer cualquier otra cosa:

(IBAction)myInit
{
square = [[Square alloc] init];
}

Ahora puedo utilizar los métodos de la primera poste Y listo!

PD: críticos, el fuego

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top