Artikel Tagged 'Selektor'

Objective-C: Nachtrag zu den Notifizierungen und Delegierte

Antwort auf die Frage, ILeW mit einem Artikel, um sich selbst besser zu erklären, umgebende Instanz , Arbeit als Delegierte und Benachrichtigungen. Mit einem Muster, das wir zuerst sehen, wie der Delegierte Muster:

Delegate

Ein Objekt, auf der Suche nach einem Delegierten

Mehr ...

Xcode4: abwärtskompatibel Code

Xcode 4 ermöglicht, um Anwendungen für iPhone oder iPad mit niedrigeren Ziel der heutigen iPhone OS 4.3 zu entwickeln. Doch der gleiche Code, der mit Vorlagen "Sünde" der Arroganz kommt, vorausgesetzt, dass unsere Anwendung zielt auf iPhone OS 4 oder höher. Bei der Anwendung Delegierter zum Beispiel Einsätze Xcode die folgenden Zeilen Code:

1
2
3
4
5
6
7
BOOL ) application : ( UIApplication * ) application didFinishLaunchingWithOptions : ( NSDictionary * ) launchOptions - (BOOL) Anwendung: (UIApplication *) Anwendung didFinishLaunchingWithOptions: ( NSDictionary *) launchOptions
{
/ / Überschreiben Punkt, die individuell nach den Start von Anwendungen.
self.window.rootViewController = self.viewController;
; [Self.window makeKeyAndVisible];
; wieder Ja;
}

Mehr ...

Objective-C: Behandeln mehrerer Animationen in einem setAnimationDidStopSelector

è estremamente versatile, come già visto in setAnimationDidStopSelector: usi diversi ed avanzati . Die Einstellung der Ende der Animation, mit ausgeführt setAnimationDidStopSelector , einer Klasse von UIView ist extrem vielseitig, wie in gesehen setAnimationDidStopSelector: unterschiedliche Nutzungen und Fortgeschrittene .
Lassen Sie mich nun zeigen Ihnen eine Technik sehr bequem, wenn wir mehrere Animationen und / oder haben wollen, um die Warteschlangen (Queue) von Animationen zu verwalten.

Mehr ...

Privates Unternehmen API bei der Entfernung von der scroll in einem Objekt UIWebView

In sehr kurze Schnipsel: Entfernen Sie blättern aus einer UIWebView Objekt sahen wir, wie es möglich war, das Buch von einem Objekt entfernen UIWebView :

Mehr ...

Verwenden Sie performSelector zu ganzzahligen Parameter oder boolean übergeben

Die Nachrichten (Methoden) in der Anwendung definiert (Application delegiert) wichtigsten kann schnell mit Hilfe aufgerufen werden performSelector :

1
2
delegate ] [[[UIApplication sharedApplication] Delegierter]
( applicationMessage ) ] ; performSelector: @ selector (applicationMessage)];

Mehr ...

Sehr kurze Auszug: Entfernen Sie blättern aus einer UIWebView Objekt

Dokumentiert oder undokumentiert, ein Feature, manchmal ist man gezwungen, mit Gewalt durchzusetzen! Nützlich in manchen Fällen ist, das Buch von einem Objekt entfernen UIWebView . : Interessant ist, im Allgemeinen finden Sie, wie Sie die Komponenten "internen" Teil des Objekts in Frage zu: in diesem Beispiel ruft das Objekt Zeiger UIScrollView dieses Objekt UIWebView :

Mehr ...

Sehr kurze Auszug: Objective-C, Selector aus NSString

Objective-C ist eine wunderbare Sprache, mit dem Sie erstaunliche Dinge tun können. Einer der interessantesten Aspekte ist seine dynamische Aufruf von Methoden (Nachrichten). Es ist möglich, und zwar, um die Adresse einer Nachricht von einer Zeichenkette zu erhalten.

Mehr ...

setAnimationDidStopSelector: unterschiedliche Nutzungen und Fortgeschrittene

In den meisten Fällen, oder weil wir gewohnt sind oder weil wir in Tutorien und in manchen Texten gesehen haben, verwenden wir die setAnimationDidStopSelector auf diese Weise:

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

; myView.alpha = 0;

; [UIView commitAnimations];

/ /

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

come delegato e tramite la setAnimationDidStopSelector gli invia un messaggio removeView quando l'animazione è terminata. In dem obigen Code der setAnimationDelegate gesetzt self als Delegierter und durch setAnimationDidStopSelector sendet eine Nachricht removeView , wenn die Animation beendet ist. Der Code selbst korrekt ist, jedoch zur Verwendung einer Nachricht Wortes ( removeView ) aufweist, weggelassen werden könnte. Nun, hier ist der gleiche Code, mit dem gleichen Effekt, ohne die Nachricht removeView :

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

; myView.alpha = 0;

; [UIView commitAnimations];

! Das Interessante an diesem Ansatz ist, dass myView könnte sein, eine Unterklasse von UIView ! Es kann daher eine benutzerdefinierte Klasse mit eigenen Botschaften zu sein und in der Weise dargelegt, durch leise genannt setAnimationDidStopSelector . Darüber hinaus sind die setAnimationDidStopSelector zustimmen Selektoren mit Parametern:

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

; myView.alpha = 0;

; [UIView commitAnimations];

Dieses Beispiel auf alle Fälle hier, wo wir einen Delegierten erweitert werden kann, ist nicht atro ein Zeiger auf eine Instanz eines Objekts.

Mehr ...

Wie Sie Ihr eigenes Protokoll erstellen mit delegierter

Selbst in den einfachsten Tutorial finden Sie die Verwendung von Protokollen. Es wird sicherlich auf viele Ihrer View-Controller in einem Protokoll, das geschehen, verteilen, neben der Definition der Schnittstelle, eine Anweisung ähnlich:

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

Mehr ...

iPhone: Erstellen Sie einen Weg, um auf Ereignisse, die Klasse zu überqueren reagieren

Normalerweise wird ein Ereignis, das nichts anderes als eine Nachricht festgelegt ist (gesetzt und umgesetzt) ​​in der gleichen Klasse oder Rahmen, die Funktion oder Prozedur "Anrufer" ist. o in un UIViewController . Wenn wir zum Beispiel eine Schaltfläche hinzufügen UIButton via Code (programmatisch), können wir unsere Klasse in einem zu finden UIView oder einem UIViewController . In beiden Fällen ist die Aufgabenverteilung und die Initialisierung der Taste wird durch die Einstellung des befolgt werden target , die eine Nachricht erhalten soll, wenn es "Klick" auf die Schaltfläche ein:

1
2
3
4
5
6
7
8
9
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton Taste * = [UIButton buttonWithType: UIButtonTypeRoundedRect];
10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
@ "Press me" forState : UIControlStateNormal ] ; [Button setTitle: @ "Drück mich" forState: UIControlStateNormal];
/ / Entscheiden Sie, wer die Nachricht erhalten UIControlEventTouchUpInside
self action : @selector ( onButtonClicked ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget Button: Selbst Aktion: @ selector (OnButtonClicked) forControlEvents: UIControlEventTouchUpInside];
/ / ...
void ) onButtonClicked { - (Void) {OnButtonClicked
/ / ...
}

Zeile 5 der oben angezeigten Code entscheidet, wer (Subjekt) und was (Verfahren) "Anruf", wenn unsere Taste gedrückt wird. In dem dargestellten Beispiel oben ist auch bemerkenswert, dass die Einstellung der Nachricht von Druck auf dem Verfahren gesendet wird onButtonClick implementiert mehr Unten, und die Teil des gleichen Zusammenhang (oder Klasse). potremmo inviare il nostro messaggio ad un qualsiasi altro oggetto, posto quindi al difuori del contesto in uso. Die erste Überlegung ist offensichtlich, dass wir tun können, ist dann, dass durch Veränderung der Parameter self und action können wir unsere Botschaft an jedes andere Objekt zu senden, dann auch außerhalb des Kontextes, in Gebrauch. : Hier ein Beispiel: Eine Klasse UIApplicationDelegate eine UIViewController :

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

associata al UIViewController stesso: Die SplashScreenController macht eine Methode, mit der Sie die Animation erlaubt UIView mit verbundenen UIViewController gleiche:

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 ] ; [UIView beginAnimations: nil context: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
self ] ; [UIView setAnimationDelegate: self];
@selector ( onAnimationFinished ) ] ; [UIView setAnimationDidStopSelector: @ selector (onAnimationFinished)];
CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480};
; [UIView commitAnimations];
}
/ / ...
void ) onAnimationFinished { - (Void) {onAnimationFinished
"Animazione terminata" ) ; NSLog (@ "Animation beendet");
}

. Der obige Code zeigt eine Methode innerhalb der Klasse definiert SplashScreenController Typ UIViewController . ) onAnimationFinished definito più sotto, facente parte sempre della classe SplashScreenController . Es tut nichts, aber animieren die UIView animieren ihn hin, und wenn die Animation abgeschlossen ist, rufen Sie (senden eine Nachricht an sich selbst - und damit self ) onAnimationFinished unten definiert, ist ein Teil der Klasse immer SplashScreenController . , non saremo informati della fine dell'animazione: Daraus folgt, dass in unserem myAppDelegate , wenn wir die Methode aufrufen animateBackgroundDown , werden wir nicht von dem Ende der Animation zu informieren:

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

Was wir wollen, stattdessen ist es, eine neue Version erstellen animateBackgroundDown als ihm zu sagen, wo um die Nachricht zu Ende Animation senden und welche Methode zu nennen. In der Praxis wollen wir sicherstellen, können Sie in unserer Klasse schreiben myAppDelegate :

1
2
3
4
5
6
7
8
/ /
/ / MyAppDelegate.m
/ /
self selector : @selector ( onAnimationFinished ) ] ; [SplashScreenController animateBackgroundDown: self selector: @ selector (onAnimationFinished)];
/ / ...
void ) onAnimationFinished { - (Void) {onAnimationFinished
"Animazione terminata" ) ; NSLog (@ "Animation beendet");
}

, bensì in myAppDelegate . Dieses Mal das Verfahren onAnimationFinished nicht im UIViewController , aber in myAppDelegate . nel modo seguente: Dazu ändern Sie einfach die Methode animateBackgroundDown in UIViewController wie folgt:

1
2
3
4
5
6
7
8
9
10
11
12
/ /
/ / SplashScreenController.m
/ /
void ) animateBackgroundDown : ( id ) target selector : ( SEL ) selector { - (Void) animateBackgroundDown: (id) Zielauswahlvorrichtung: (SEL) {Selektor
nil context : nil ] ; [UIView beginAnimations: nil context: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
target ] ; [UIView setAnimationDelegate: target];
selector ] ; [UIView setAnimationDidStopSelector: Selektor];
CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480};
; [UIView commitAnimations];
}

). Jetzt haben wir eine Methode, die den "Kontext" (akzeptiert target ) und die Methode aufgerufen werden ( selector ). a qualsiasi altro “oggetto” / classe in grado di riceverlo. Nun, wenn die Animation beendet, erscheint die Meldung AnimationDidStop geht an myAppDelegate andere "Objekt" / Klasse, die sie empfangen können.

Mehr ...


Stop SOPA