Articles taggés avec 'Sélecteur'

Objective-C: Addendum sur les notifications et les délégués

Réponse à la question de ILeW avec un article sur ce que le réel, la fixation de telles que les notifications et les travaux des délégués. Utilisation d'un modèle que nous voyons d'abord comment le modèle de délégué:

Delegate

Un objet à la recherche d'un délégué

Suite ...

Xcode4: Code rétrocompatible

Xcode 4 vous permet de développer des applications pour iPhone ou iPad avec un objectif inférieur à l'iPhone OS 4.3 d'aujourd'hui. Toutefois, le même code que celui fourni avec des modèles «péché» de l'arrogance, en supposant que notre demande sera cibles iPhone OS 4 ou supérieur. Déléguée à l'application, par exemple, insère Xcode les lignes suivantes du code:

1
2
3
4
5
6
7
BOOL ) application : ( UIApplication * ) application didFinishLaunchingWithOptions : ( NSDictionary * ) launchOptions - (BOOL) application: (UIApplication *) didFinishLaunchingWithOptions demande: ( NSDictionary *) launchOptions
{
/ / Override point pour la personnalisation après le lancement d'application.
self.window.rootViewController = self.viewController;
; [Self.fenetre makeKeyAndVisible];
; OUI le retour;
}

Suite ...

Objective-C: gérer plusieurs animations avec une seule setAnimationDidStopSelector

è estremamente versatile, come già visto in setAnimationDidStopSelector: usi diversi ed avanzati . Le réglage de la fin de l'animation, exécuté avec setAnimationDidStopSelector , une classe de UIView est extrêmement polyvalent, comme vu dans setAnimationDidStopSelector: les différents usages et avancées .
Permettez-moi maintenant vous montrer une technique très pratique lorsque nous avons des animations multiples et / ou souhaitez gérer les files d'attente (queue) des animations.

Suite ...

API privées à l'enlèvement du rouleau dans un objet UIWebView

En très court extrait: Retirer défiler partir d'un objet UIWebView nous avons vu comment il était possible de retirer le rouleau d'un objet UIWebView :

Suite ...

Utilisez performSelector de passer des paramètres entiers ou des booléens

Les messages (méthodes) définies dans l'application (Application déléguée) principales peuvent être invoquées rapidement en utilisant performSelector :

1
2
delegate ] [[SharedApplication UIApplication [] délégué]
( applicationMessage ) ] ; performSelector: @ selector (applicationMessage)];

Suite ...

Très court extrait: Retirer défiler d'un objet à UIWebView

Avec ou sans papiers, une caractéristique, parfois, vous êtes obligé de mettre en œuvre par la force! Utile dans certaines situations, le défilement est de supprimer un objet de UIWebView . : Fait intéressant, en général, voir comment vous pouvez accéder aux composants internes 'une partie de l'objet en question: dans cet exemple récupère l'objet pointeur UIScrollView présent dans le sujet UIWebView :

Suite ...

Très court extrait: Objective-C NSString Selector

Objective-C est un langage merveilleux qui vous permet de faire des choses étonnantes. Un des aspects les plus intéressants est son invocation dynamique des méthodes (des messages). Vous pouvez, en fait, obtenir l'adresse d'un message d'une chaîne.

Suite ...

setAnimationDidStopSelector: les différents usages et avancées

Dans la plupart des cas, ou parce que nous sommes habitués ou parce que nous avons vu dans les didacticiels et dans certains textes, nous utilisons le setAnimationDidStopSelector de cette manière:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
self ] ; [SetAnimationDelegate UIView: self];
@selector ( removeView ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeView)];

; myView.alpha = 0;

; [CommitAnimations UIView];

/ /

void ) removeView { - (Void) {removeView
; [MyView removeFromSuperview];
}

come delegato e tramite la setAnimationDidStopSelector gli invia un messaggio removeView quando l'animazione è terminata. Dans le code ci-dessus l' setAnimationDelegate mis self en tant que délégué et par setAnimationDidStopSelector envoie un message removeView lorsque l'animation est terminée. Le code lui-même est correct, cependant, fait usage d'une définition de message ( removeView ) qui pourraient être omis. Maintenant, voici le même code, avec le même effet, sans le message removeView :

1
2
3
4
5
6
7
8
9
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
myView ] ; [SetAnimationDelegate UIView: myView];
@selector ( removeFromSuperview ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeFromSuperview)];

; myView.alpha = 0;

; [CommitAnimations UIView];

! La chose intéressante à propos de cette approche est que myView pourrait être une sous-classe de UIView ! Il peut donc être une classe personnalisée avec nos propres messages et, comme indiqué, facilement appelables depuis setAnimationDidStopSelector . En outre, le setAnimationDidStopSelector sélecteurs d'accord avec les paramètres:

1
2
3
4
5
6
7
8
9
nil context : NULL ] ; [BeginAnimations UIView: contexte nul: NULL];
1.5 ] ; [UIView setAnimationDuration: 1,5];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
myView ] ; [SetAnimationDelegate UIView: myView];
@selector ( myMessage : param1 : ) ] ; [UIView setAnimationDidStopSelector: @ selector (myMessage: param1:)];

; myView.alpha = 0;

; [CommitAnimations UIView];

Cet exemple peut être étendu à tous les cas ici, où nous installons un délégué, Atro n'est pas un pointeur vers une instance de n'importe quel objet.

Suite ...

Comment créer votre propre protocole avec les déléguées

Même dans le tutoriel le plus simple, vous trouverez l'utilisation de protocoles. Il arrivera certainement pour beaucoup dans votre contrôleur afin d'utiliser un protocole, la saisie, à côté de la définition de l'interface, une déclaration similaire à:

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

Suite ...

iPhone: créer un moyen de réagir aux événements qui traversent la classe

Normalement, un événement, qui n'est rien mais un message est fixe (fixé et mis en œuvre) dans la même classe ou son contexte, la fonction ou la procédure de "caller". o in un UIViewController . Par exemple, si nous ajoutons un bouton UIButton via un code (programmation), nous pouvons trouver notre classe dans un UIView ou un UIViewController . Dans les deux cas la répartition des tâches et l'initialisation de la touche sera suivie par l'établissement d' target qui devrait recevoir un message quand il "clique" sur le bouton, tapez:

1
2
3
4
5
6
7
8
9
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton * bouton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
@ "Press me" forState : UIControlStateNormal ] ; [Bouton setTitle: @ "me presse" Forst: UIControlStateNormal];
/ / Décidez qui devrait recevoir le message de UIControlEventTouchUpInside
self action : @selector ( onButtonClicked ) forControlEvents : UIControlEventTouchUpInside ] ; Bouton [AddTarget: action d'auto: @ selector (onButtonClicked) forControlEvents: UIControlEventTouchUpInside];
/ / ...
void ) onButtonClicked { - (Void) {onButtonClicked
/ / ...
}

Ligne 5 décide qui le code montré ci-dessus (l'objet) et ce (méthode) "appel" lorsque notre bouton est pressé. Dans l'exemple ci-dessus est également connu que le réglage de la pression du message est envoyé à la méthode onButtonClick œuvre ci-dessous, qui faisait alors partie du même contexte (ou classe). potremmo inviare il nostro messaggio ad un qualsiasi altro oggetto, posto quindi al difuori del contesto in uso. La première considération est évident que nous pouvons faire, alors, est que, en modifiant les paramètres de self et de action que nous pouvons envoyer notre message à tout autre objet, puis placer dans le contexte dans difuori utilisation. : Voici un exemple pratique: une classe UIApplicationDelegate créer un UIViewController :

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

associata al UIViewController stesso: Le SplashScreenController expose une méthode qui vous permet d'animer le UIView associé à UIViewController même:

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: contexte nulle: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
self ] ; [SetAnimationDelegate UIView: self];
@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 (@ "L'animation est terminée");
}

. Le code ci-dessus montre une méthode définie dans la classe SplashScreenController Type UIViewController . ) onAnimationFinished definito più sotto, facente parte sempre della classe SplashScreenController . Il ne fait rien, mais animer le UIView l'animer en bas, et quand l'animation est terminée, composez le (envoyer un message à lui-même - donc self ) onAnimationFinished défini ci-dessous, fait partie de la classe toujours SplashScreenController . , non saremo informati della fine dell'animazione: Il s'ensuit que, dans nos myAppDelegate , quand nous invoquons la méthode animateBackgroundDown , nous ne serons pas informés de la fin de l'animation:

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

Que nous pourrions, au contraire, est de créer une nouvelle version de animateBackgroundDown qui me disent envoyer le message à la fin de l'animation, et la méthode à appeler. En pratique, nous voulons faire en sorte d'écrire dans notre classe myAppDelegate :

1
2
3
4
5
6
7
8
/ /
/ / MyAppDelegate.m
/ /
self selector : @selector ( onAnimationFinished ) ] ; [SplashScreenController animateBackgroundDown: auto sélecteur: @ selector (onAnimationFinished)];
/ / ...
void ) onAnimationFinished { - (Void) {onAnimationFinished
"Animazione terminata" ) ; NSLog (@ "L'animation est terminée");
}

, bensì in myAppDelegate . Cette fois la méthode onAnimationFinished n'est pas dans le UIViewController , mais dans myAppDelegate . nel modo seguente: Pour ce faire il suffit de changer la méthode animateBackgroundDown de UIViewController comme suit:

1
2
3
4
5
6
7
8
9
10
11
12
/ /
/ / SplashScreenController.m
/ /
void ) animateBackgroundDown : ( id ) target selector : ( SEL ) selector { - (Void) animateBackgroundDown: (id) cible sélecteur: (SEL) sélecteur {
nil context : nil ] ; [BeginAnimations UIView: contexte nulle: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
target ] ; [SetAnimationDelegate UIView: cible];
selector ] ; [UIView setAnimationDidStopSelector: sélecteur];
CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480};
; [CommitAnimations UIView];
}

). Maintenant nous avons une méthode qui prend le "contexte" ( target ) et la méthode à appeler ( selector ). a qualsiasi altro “oggetto” / classe in grado di riceverlo. Maintenant, lorsque l'animation se termine, le message AnimationDidStop sera envoyé à myAppDelegate tout autre "objet" / classe qui peut le recevoir.

Suite ...


Arrêtez SOPA