251 votes

iOS - Appelant Délégué d'Application de la méthode du ViewController

Ce que j'essaie de faire est de cliquer sur un bouton (qui a été créé dans le code) et l'ont appeler une autre vue-contrôleur, puis exécutez une fonction dans le nouveau-vue-contrôleur.

Je sais que ça pourrait se faire relativement facilement au bureau de l'IB, mais ce n'est pas une option.

Un exemple de ce que je veux faire serait si vous aviez deux contrôleurs de l'un avec un écran de démarrage de la maison. L'autre point de vue, contrôleur avait une promenade à travers de la maison que vous pourriez aller à travers toutes les pièces dans un ordre fixe. L'écran de démarrage aurait boutons pour chaque pièce qui vous permettra de sauter à n'importe quel point sur la promenade à travers.

Merci d'avance pour toute aide.

542voto

Cristian Radu Points 4733

Vous pouvez accéder à la délégué comme ceci:

MainClass *appDelegate = (MainClass *)[[UIApplication sharedApplication] delegate];

Remplacer MainClass avec le nom de votre classe d'application.

Alors, si vous avez une propriété à l'autre-vue-contrôleur, vous pouvez appeler quelque chose comme:

[appDelegate.viewController someMethod];

45voto

canhazbits Points 768

Et si quelqu'un se demande comment faire dans swift:

var myDelegate = UIApplication.sharedApplication().delegate as AppDelegate
myDelegate.someMethod()

41voto

sradforth Points 1371

Sonne comme vous avez juste besoin d'un UINavigationController d'installation?

Vous pouvez obtenir de l' AppDelegate n'importe où dans le programme par l'entremise de

YourAppDelegateName* blah = (YourAppDelegateName*)[[UIApplication sharedApplication]delegate];

Dans votre délégué d'application, vous devez avoir votre manette de navigation de l'installation, soit par l'intermédiaire de l'IB ou dans le code.

Dans le code, en supposant que vous avez créé votre Maison de aperçu de " viewcontroller déjà qu'il serait quelque chose comme ceci dans votre AppDelegate didFinishLaunchingWithOptions...

self.m_window = [[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds] autorelease];
self.m_navigationController = [[[UINavigationController alloc]initWithRootViewController:homeViewController]autorelease];
[m_window addSubview:self.m_navigationController.view];

Après cela, vous avez juste besoin d'un viewcontroller par "chambre" et d'invoquer les éléments suivants lorsqu'un événement clic du bouton est ramassé...

YourAppDelegateName* blah = (YourAppDelegateName*)[[UIApplication sharedApplication]delegate];
[blah.m_navigationController pushViewController:newRoomViewController animated:YES];

Je n'ai pas testé le code ci-dessus afin de pardonner les erreurs de syntaxe, mais espère que le pseudo-code est de vous aider...

18voto

Pyraego.com Points 715

C'est de cette façon que je le fais.

[[[UIApplication sharedApplication] delegate] performSelector:@selector(nameofMethod)];

N'oubliez pas d'importer.

#import "AppDelegate.h"

11voto

NSObject <UIApplicationDelegate> * universalAppDelegate = 
    ( NSObject <UIApplicationDelegate> * ) [ [ UIApplication sharedApplication ] delegate ];

C'éviter d'avoir à inclure votre AppDelegate.h partout. C'est une distribution simple qui va un long chemin, permettant de développer de Contrôleur indépendant, et de les réutiliser ailleurs sans vous soucier nom de la classe et ainsi de suite...

Profitez de

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X