Artículos con la etiqueta 'mensaje'

Cómo crear tu propio protocolo con el delegado

Incluso en el tutorial más simples que usted puede encontrar el uso de protocolos. Sin duda, va a pasar a muchos en su controlador para utilizar un protocolo, escribir, junto a la definición de la interfaz, una declaración similar a:

1
2
3
UIViewController <uiwebviewdelegate> { @ Interface myViewController: {UIViewController <uiwebviewdelegate>
...
}

Continuación ...

iPhone: Crear una forma de responder a los eventos que cruzan la clase

Normalmente, un evento que no es más que un mensaje es fijo (establecido y aplicado) en la misma clase o contexto, la función o el procedimiento de "llamador". o in un UIViewController . Por ejemplo, si se añade un botón UIButton a través del código (programación), se encuentra nuestra clase en un UIView o UIViewController . En ambos casos, la asignación de tareas y la inicialización del botón será seguido por el establecimiento de target que debe recibir un mensaje cuando se hace "click" el botón, escriba:

1
2
3
4
5
6
7
8
9
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton * = botón [UIButton buttonWithType: UIButtonTypeRoundedRect];
10 , 180 , 300 , 30 ) ; bottone.frame CGRectMake = (10, 180, 300, 30);
@ "Press me" forState : UIControlStateNormal ] ; [Botón setTitle: @ "me Prensa" Forst: UIControlStateNormal];
/ / Decidir quién debe recibir el mensaje de UIControlEventTouchUpInside
self action : @selector ( onButtonClicked ) forControlEvents : UIControlEventTouchUpInside ] ; El botón [AddTarget: acción de auto: @ selector (onButtonClicked) forControlEvents: UIControlEventTouchUpInside];
/ / ...
void ) onButtonClicked { - (Void) {onButtonClicked
/ / ...
}

Línea 5 decide que la palabra clave (el objeto) y lo (método) "llamada" cuando nuestros se pulsa el botón. En el ejemplo anterior también se sabe que el ajuste de la presión de que el mensaje se envía al método onButtonClick implementado a continuación, que entonces formaba parte del mismo contexto (o clase). potremmo inviare il nostro messaggio ad un qualsiasi altro oggetto, posto quindi al difuori del contesto in uso. La primera consideración es evidente que podemos hacer, entonces, es que mediante la alteración de los parámetros de self y action que podemos enviar nuestro mensaje a cualquier otro objeto, se colocará en la difuori contexto de uso. : He aquí un ejemplo: una clase UIApplicationDelegate crear un UIViewController :

1
2
3
4
5
/ /
/ / MyAppDelegate.m
/ /
SplashScreenController alloc ] ; splashScreenController = [SplashScreenController alloc];
splashScreenController.view ] ; [Ventana addSubview: splashScreenController.view];

associata al UIViewController stesso: El SplashScreenController expone un método que permite animar el UIView asociados con UIViewController mismo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ /
/ / SplashScreenController.m
/ /
void ) animateBackgroundDown { - (Void) {animateBackgroundDown
nil context : nil ] ; [BeginAnimations UIView: contexto cero: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
self ] ; [SetAnimationDelegate UIView: auto];
@selector ( onAnimationFinished ) ] ; [UIView setAnimationDidStopSelector: @ selector (onAnimationFinished)];
CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480};
; [CommitAnimations UIView];
}
/ / ...
void ) onAnimationFinished { - (Void) {onAnimationFinished
"Animazione terminata" ) ; NSLog (@ "La animación ha terminado");
}

. El código anterior muestra un método definido dentro de la clase SplashScreenController tipo UIViewController . ) onAnimationFinished definito più sotto, facente parte sempre della classe SplashScreenController . No hace más que animar el UIView animación abajo, y cuando la animación se ha completado, llame al (enviar un mensaje a sí mismo - de ahí self ) onAnimationFinished se define a continuación, es parte de la clase siempre SplashScreenController . , non saremo informati della fine dell'animazione: De ello se desprende que en nuestro myAppDelegate , al invocar el método animateBackgroundDown , no vamos a ser informado de la final de la animación:

1
2
3
4
/ /
/ / MyAppDelegate.m
/ /
; [SplashScreenController animateBackgroundDown];

Lo que puede ser que desee, en cambio, es la creación de una nueva versión de animateBackgroundDown que me dicen a dónde enviar el mensaje al final de la animación, y el método de llamada. En la práctica, quiere asegurarse de que escribir en nuestra clase myAppDelegate :

1
2
3
4
5
6
7
8
/ /
/ / MyAppDelegate.m
/ /
self selector : @selector ( onAnimationFinished ) ] ; [SplashScreenController animateBackgroundDown: auto selector: @ selector (onAnimationFinished)];
/ / ...
void ) onAnimationFinished { - (Void) {onAnimationFinished
"Animazione terminata" ) ; NSLog (@ "La animación ha terminado");
}

, bensì in myAppDelegate . Esta vez el método onAnimationFinished no está en la UIViewController , pero en myAppDelegate . nel modo seguente: Para ello basta con cambiar el método de animateBackgroundDown en UIViewController de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
/ /
/ / SplashScreenController.m
/ /
void ) animateBackgroundDown : ( id ) target selector : ( SEL ) selector { - (Void) animateBackgroundDown: (id) objetivo de selección: (SEL) selector {
nil context : nil ] ; [BeginAnimations UIView: contexto cero: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
target ] ; [SetAnimationDelegate UIView: blanco];
selector ] ; [UIView setAnimationDidStopSelector: selector];
CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480};
; [CommitAnimations UIView];
}

). Ahora tenemos un método que toma el "contexto" ( target ) y el método de llamada ( selector ). a qualsiasi altro “oggetto” / classe in grado di riceverlo. Ahora, cuando termina la animación, el mensaje AnimationDidStop será enviado a myAppDelegate cualquier otro "objeto" / clase que pueda recibir.

Continuación ...