Aktualisieren UILabel von einer anderen Klasse
-
05-07-2019 - |
Frage
Ich bin ziemlich neu für iPhone Entwicklung und ich meinen Kopf noch um Objective-C bekommen, so tragen Sie bitte mit mir:)
Ich versuche, den Text eines Etiketts zu ändern aus dem Inneren eines Objekts, das in die Hauptansicht-Controller gehört. Umm. Ich denke, das klingt richtig.
Für die von Ihnen vertraut mit der AQRecorder
Klasse aus dem SpeakHere Beispiel auf dem iPhone Reference Library : -
Ich versuche, ein Etikett jedes Mal AQRecorder::MyInputBufferHandler
zu aktualisieren aufgerufen wird (das heißt, wenn die Eingangspuffer gefüllt wurden)
Mein erster Ansatz war die AQRecorder
Klasse zu ändern, um eine UILabel*
zu enthalten, die ich als Parameter an den modifizierten Konstruktor senden. Es funktionierte, aber es fühlte sich sehr falsch. Und jetzt, wo ich ein paar verschiedene UI-Komponenten ändern, möchte ich hoffte, es gibt einen besseren Weg.
Ich habe das Gefühl, dass ich etwas Grundsätzliches bin fehlt. Das oder ich werde ein wenig Refactoring erfordern.
Lösung
Schauen Sie in mit NSNotificationCenter
. Es bietet entkoppelten Benachrichtigungen, so dass die Recorder-Klasse muss nichts über die Benutzeroberfläche kennen.
Andere Tipps
Neben Meldungen (wie von Kristopher vorgeschlagen), was sehr praktisch sind, wenn Sie „global“ Meldungen mit möglicherweise mehreren Beobachtern haben, der klassische Ansatz, der in den Sinn kommt, ist eine Delegation.
In Ihrem Fall die Klasse, die das Ereignis (AQRecorder
?) Behandelt könnte einen Delegaten Protokoll definieren und einen Delegaten Eigenschaft hat, während die Klasse die UILabel
besitzt (Haupt-View-Controller?) Könnte dieses Protokoll implementieren und das Etikett aktualisieren in die Protokollimplementierung (oder tun, was sonst getan werden muss).