Was genau tut Delegate in xcode ios Projekt?
Habe ich nur learning-iPhone-apps-Entwicklung, aber ich habe eine harte Zeit zu verstehen, was delegieren Sie eigentlich bedeutet? Kann mir jemand sagen, mit Beispiel, was es tut und wie wichtig es ist? Vielen Dank für jeden der hilft!
InformationsquelleAutor der Frage Newbie | 2011-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein wichtiges Konzept zu verstehen, konzeptionell so bekommen Sie Ihren Kopf herum, wie zu denken, es vor den technischen details ist wichtig. Einfach ausgedrückt, ist ein Delegat ist ein callback.
Wesentlichen zwei Szenarien zu verwenden Delegierte:
Beispiele:
UITableView - Tabelle-Ansicht ist nur eine Steuerung, die weiß, wie man die Wiedergabe einer Liste von Zellen. Es behandelt alle das heben schwerer rendering, scrollen, etc... Aber, es hat keine Ahnung, wie laden Sie Ihre Daten. So implementieren Sie eine Datenquelle delegieren die Methoden, um die Zelle Daten für eine bestimmte Zeile usw... Das macht es einfach auf dich. Verwenden Sie einfach die Steuerung auf und stecken Sie die Besonderheiten für Ihre Daten. Die UITableView wird alles für Sie tun ... nur Antworten auf einige spezifische Fragen für. Ein Delegierter Antworten die paar konkreten Fragen.
Einem text-control - fügen Sie ein Textfeld-Steuerelement, um Ihre Ansicht und voila! geben Sie es und alls gute. Aber was, wenn Sie etwas tun wollen, wenn Sie mit der Eingabe beginnen oder, wenn Sie fertig sind Eingabe? Gut, der text-Steuerelement bietet eine delegate-Methoden, mit denen Sie den Haken in der execution-pipeline der text-Steuerelement. Es ermöglicht die text-Steuerelement, um alles für Sie tun, und können Sie wieder einwerfen-code, wo Sie es brauchen. Viele Male, es einwerfen-code, um eine Entscheidung darüber, ob etwas erlaubt ist. Die Kontrolle wird wieder anrufen und Fragen, sollte ich in der Lage sein, x zu tun? Sie können einwerfen code und beeinflussen das Verhalten.
Wenn Sie ein Steuerelement oder Klasse, Sie können erstellen Sie Ihre eigenen Protokoll -, datasource-Delegierten usw... also Ihr Steuerelement kann den Fokus auf dem, was beworben wird. Zum Beispiel, sagen wir, Sie wollten, um eine Aufgabe zu erstellen Steuern. Sie könnten:
Erstellen Sie zuerst einen Vertrag. Hey, wenn du gehst, um Daten für meine Kontrolle, das sind die Fragen, die ich bin, Sie zu bitten. Ich nehme es von dort aus... In diesem Fall werde ich Sie bitten, die Anzahl der Aufgaben, und ich bin zu haben, Sie geben mir eine Aufgabe gegeben die Nummer der Zeile.
In der Steuerung oder der Klasse, geben dem Verbraucher eine Möglichkeit zu geben, uns die Delegierten datasource-Klasse, dass die Antwort auf die Fragen der Kontrolle bitten. An diesem Punkt, die Steuerung ist eine Reine Steuerung. Es weiß nichts darüber, wie Sie Ihre Daten erhalten. Es ist zu Fragen, für ein Objekt (id), die einen Vertrag/Protokoll. id
Dann, für die delegate-Klasse in der header deklarieren, die Sie implementieren, dass die formale Protokoll
und bei der Umsetzung m-Datei geben Sie den code.
dann implementieren Sie es in der Umsetzung
InformationsquelleAutor der Antwort bryanmac
Ein Delegat ist ein Objekt einer anderen Klasse passieren können Nachrichten an. In der Praxis delegieren Klassen entsprechen einer delegate-Protokoll.
Beispielsweise nehmen wir eine Unterklasse von table view controller. Dies ist ein Delegat für Ihre Tabelle anzuzeigen. Zuerst definieren Sie, dass es ein table view delegate dadurch:
Dieser sagt, dass die Klasse
MyTableViewController
ist eine Unterklasse vonUITableViewController
und ENTSPRICHT denUITableViewDelegate
Protokoll.Einstellung
[tableView setDelegate:self]
(oder definieren Sie als solche in der IB), dann geht dieself
Objekt der tableview, um für die tableview, um Nachrichten zu senden.Die Haupt-Nachricht sendet, ist die
didSelectRowAtIndexPath
Botschaft, die sagt, Ihre Klasse, die der Benutzer gedrückt hat Tabellenansicht Zelle.Also der Gegenstand, der dem click-Ereignis (table view) geht auf die Meldung, dass die Zelle geklickt wurde, um die delegate-Objekt (in diesem Fall ist Ihre
MyTableViewController
Objekt).Delegate-Protokolle vorhanden sind, so dass Sie sicherstellen können, dass die delegate-Objekt verfügt über die notwendigen Methoden im Umgang mit Ihren Nachrichten. Methoden ein delegate-Protokoll kann
@optional
oder erzwungen. Alle Methoden sind optional, müssen nicht definiert werden. In IhremMyTableViewController
Klasse die MethodedidSelectRowAtIndexPath
ist optional - Sie müssen nicht, es zu haben. Wenn die Tabelle wird nicht die Methode es einfach nicht nennen.Jedoch die
cellForRowAtIndexPath
erforderlich ist und ohne dass es Ihre app nicht kompiliert.Ich hoffe das hilft und ist straightforwards für Sie. Wenn Sie benötigen weitere Informationen lassen Sie mich wissen.
InformationsquelleAutor der Antwort Thomas Clayson
Delegierten sind nur ein Weg, um Rückrufe von etwas. Sie einen Delegaten übergeben (Zeiger auf ein Objekt entspricht einem Protokoll), um etwas und wenn es neue Daten für Sie, oder wenn ein Ereignis Auftritt, etwas machen einen Methodenaufruf an die Delegierten.
Zum Beispiel, wenn Ereignisse auftreten, wie Sie Ihre app in den hintergrund oder die app zu beenden der UIApplication-Objekt rufen Sie Ihre Anwendung delegieren zu lassen, es zu wissen. Wenn ein CLLocationManager hat eine neue GPS-position ist, rufen Sie Ihren delegieren, weitergeben die neue position. UITableViews nennen Ihre Delegierten zu bekommen UITableViewCells in der Tabelle angezeigt werden. Es gibt viele Einsatzmöglichkeiten von Delegierten in iOS.
InformationsquelleAutor der Antwort progrmr