2012-04-02 10 views
0

Würde mich über jeden Rat freuen, wenn ich versuche, meinen Kopf darum zu wickeln - ich bin mir nicht sicher, ob ich das falsch implementiere oder von der falschen Prämisse (oder beiden) aus arbeite.Delegate mit tabBarController auf Storyboard verwenden

Wenn ich eine Klasse habe, in der ich ein Protokoll (das delegatOR) erstellt habe - um einen Delegaten für dieses Protokoll zuzuweisen, muss ich sagen, dass ich die "delegierte" Klasse irgendwohin zuweisen muss die Implementierungsdatei des Delegators und weisen Sie sie dann dem Delegierten delegieren?

Wenn ja, Folgefrage: Ich habe einen TabBarController im Storyboard eingerichtet, und wenn der Benutzer auf die Registerkarte 'Ende' klickt, möchte ich eine Nachricht an den ViewController für die Ansicht senden, die sie gerade sind verlassen, so dass es eine Warnung ausspringt, die etwas wie "bist du sicher?" sagt. Da das Storyboard hinter den Kulissen initialisiert und zugewiesen wird, weiß ich nicht, wie ich den Delegierten einrichten soll. Ich habe in einem anderen Beitrag über die Verwendung der PrepareForSegue-Methode gelesen, wenn ich zwischen zwei viewControllern übersetze, um den Delegaten festzulegen, aber nicht eine ähnliche Catch-and-Set-Technik für den tabBarController ausarbeiten kann.

Antwort

0

Wenn ich eine Klasse habe, in der ich ein Protokoll erstellt habe (der delegatOR) - um einen Delegaten für dieses Protokoll zuzuweisen, muss ich sagen, dass ich die Klasse "delegierte" zuweisen muss irgendwo in der Implementierungsdatei des Delegators und dann als delegator delegate?

Nein, die Art und Weise funktioniert es in der Regel ist, dass eine andere Klasse, in der Regel eine Art von Steuerung, instanziert (das heißt alloc/init) ein Objekt sowie dessen Delegierten, und legen Sie die Delegierten des Objekts.

Zum Beispiel, wenn Sie ein UITableView und ein UITableViewDelegate haben, in der Regel haben Sie irgendeine Art von View-Controller, der die UITableView besitzt, und besitzen auch den UITableViewDelegate (oft den View-Controller selbst den Delegat ist). Der Job des Ansichtscontrollers legt den Delegaten der Tabellenansicht fest. Es ist sicherlich nicht der UITableView's Job, seinen Delegaten zu erstellen und einzustellen.

Trotzdem haben Sie recht, dass das Festlegen von Delegaten für View-Controller schwierig ist, wenn Sie Storyboard verwenden. Wenn die Methode prepareForSegue: nicht für Sie funktioniert, nehme ich an, dass der Tab-Leiste-Controller Ihr Root-View-Controller ist (wie es wohl sein sollte, laut HIG). Da AppDelegate eine window Eigenschaft haben, sollten Sie in der Lage sein, von ihm in die Wurzel-View-Controller zu erhalten:

UITabBarController *tabController = (UITabBarController *)self.window.rootViewController; 
tabController.selectedIndex = [defaults integerForKey:kOptionLastTabSelectedKey]; 
tabController.delegate = self; 
+0

Ja - sorry, ich war der letzten Beispiele dachte ich studiert hatte, war das ein beteiligt zu schaffen Protokoll, nicht die benutzerdefinierten Kakao Delegierten verwenden. Worauf ich gestolpert bin, ist, dass die Delegation zum Zeitpunkt der Instanziierung durchgeführt werden muss, was im Nachhinein ziemlich offensichtlich ist - und ja, macht es schwierig, wenn man mit Storyboard arbeitet. Eine andere knifflige Sache, wenn man versucht, dies in der Post-Storyboard-Welt zu lernen - Storyboard-basierter Entwickler scheint den App-Delegierten nicht so sehr zu involvieren - muss erst lernen, bevor er seinen Rat gibt. Danke für Ihre Antwort. – sue

Verwandte Themen