Ce que j'essaie de faire est de cliquer sur un bouton (qui a été créé dans le code) et de le faire appeler un autre contrôleur de vue, puis d'exécuter une fonction dans le nouveau contrôleur de vue.
Je sais que cela pourrait être fait relativement facilement dans IB mais ce n'est pas une option.
Un exemple de ce que je veux faire serait si vous aviez deux contrôleurs de vue dont un avec un écran de démarrage de la maison. L'autre contrôleur de vue avait une promenade à travers la maison pour que vous puissiez parcourir toutes les pièces dans un ordre défini. L'écran de démarrage aurait des boutons pour chaque pièce qui vous permettraient de sauter à n'importe quel point de la promenade.
la source
Et si quelqu'un se demande comment faire cela en
swift
:la source
nil
? N'est-ce pas une application qui a TOUJOURS un AppDelegate?!sharedApplication()
devrait être remplacé parshared
. c'est-à-dire, supprimez "Application" et les parenthèses. Ainsi, le code de travail complet à partir de Swift 5.2 serait:if let myDelegate = UIApplication.shared.delegate as? AppDelegate { myDelegate.someMethod() }
On dirait que vous avez juste besoin d'une
UINavigationController
configuration?Vous pouvez obtenir le
AppDelegate
n'importe où dans le programme viaDans votre délégué d'application, vous devriez avoir la configuration de votre contrôleur de navigation, soit via IB ou en code.
Dans le code, en supposant que vous avez déjà créé votre Viewcontroller 'Vue d'ensemble de la maison', ce serait quelque chose comme ça dans votre
AppDelegate
didFinishLaunchingWithOptions
...Après cela, vous avez juste besoin d'un viewcontroller par «salle» et invoquez ce qui suit lorsqu'un événement de clic de bouton est détecté ...
Je n'ai pas testé le code ci-dessus, alors pardonnez toutes les erreurs de syntaxe, mais j'espère que le pseudo-code vous sera utile ...
la source
Voilà comment je le fais.
N'oubliez pas d'importer.
la source
Suivez simplement ces étapes
1. importez votre délégué d'application dans votre classe où vous voulez un objet délégué d'application.
2. à l'intérieur de votre classe, créez une instance de votre objet délégué d'application (c'est fondamentalement un singleton).
3.Appelez maintenant la méthode en utilisant le sélecteur
ou directement par
pour rapide
je recommanderai le premier. Courez et partez.
la source
Cela évite d'avoir à inclure votre AppDelegate.h partout. C'est une distribution simple qui va un long chemin, permettant de développer un contrôleur indépendant et de les réutiliser ailleurs sans se soucier du nom de la classe et ainsi de suite ...
Prendre plaisir
la source
Beaucoup de bonnes réponses sont déjà ajoutées. Bien que je veuille ajouter quelque chose qui me convient la plupart du temps.
et c'est tout. Utilisez-le tout au long de l'application comme une constante.
par exemple
N'oubliez pas d'importer votreAppDelegate.h dans le fichier .pch ou macros correspondant.
la source
Si quelqu'un a besoin de la même chose dans Xamarin (Xamarin.ios / Monotouch), cela a fonctionné pour moi:
(Nécessite l'utilisation d'UIKit;)
la source
Et au cas où vous auriez besoin d'accéder à votre délégué d'extension WatchKit depuis un contrôleur de vue sur watchOS:
la source
Mise à jour pour Swift 3.0 et supérieur
appeler la méthode ci-dessus à partir de votre contrôleur en suivant
Production:
la source
Vous pouvez ajouter
#define uAppDelegate (AppDelegate *)[[UIApplication sharedApplication] delegate]
dans lePrefix.pch
fichier de votre projet, puis appeler n'importe quelle méthode de votreAppDelegate
dans anyUIViewController
avec le code ci-dessous.la source
Même si c'est techniquement faisable, ce n'est PAS une bonne approche. Lorsque vous dites: "L'écran de démarrage aurait des boutons pour chaque pièce qui vous permettraient de sauter à n'importe quel point de la promenade." Vous souhaitez donc passer par appdelegate pour appeler ces contrôleurs via des événements tohc sur les boutons?
Cette approche ne suit pas les directives d'Apple et présente de nombreux inconvénients.
la source
En 2020, iOS13, xCode 11.3. Ce qui fonctionne pour Objective-C, c'est:
#import "AppDelegate.h"
Ça marche pour moi, j'espère la même chose pour vous! :RÉ
la source