Comment puis-je accéder à ma Demande du Délégué de la fenêtre de méthode d'accesseur à partir d'un autre objet?
Comme mentionné précédemment, je suis Objective-C newbie de la première commande, mais après avoir lu 4 livres physiques sur le sujet et un seau charge des ebooks et de la documentation je n'ai pas encore trouver ce que je cherche.
J'ai un haut-niveau de l'affichage du contenu contrôleur qui veut configurer sa propriété en vue de la physique des dimensions de la fenêtre de propriété de l'application délégué. C'est quelque chose que plusieurs personnes ont déjà posé des questions sur. ([UIScreen mainScreen]
ne coupe pas pour les raisons déjà diffusé de nombreuses fois avant sur ce forum). Par conséquent, l'approche logique serait pour l'affichage du contenu contrôleur de lire le cadre de la demande du délégué de la fenêtre. Maintenant, la seule réponse que j'ai trouvé qui se rapproche de cela est d'utiliser [[[UIApplication sharedApplication] window] frame]
- toutefois, cela ne fonctionne qu'une fois la fenêtre de propriété a été faite keyAndVisible. L'affichage du contenu contrôleur doit lire le délégué d'application de la propriété de la fenêtre avant il arrive à makeKeyAndVisible. Le code va dans cet ordre....
Délégué D'Application:
- (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {
//This next line is a test window frame for R&D purposes....
[self setWindow: [[UIWindow alloc] initWithFrame: CGRectMake(0.0f, 20.0f, 320.0f, 320.0f)]];
if ([self window]) {
contentViewController = [[ContentViewControl alloc] initWithNibName: nil bundle: nil]; //Content view controller instantiated here
if (contentViewController) {
[[self window] addSubview: [contentViewController view]];
[[self window] layoutSubviews];
[[self window] makeKeyAndVisible]; //Window made key and visible here
return YES;
}
}
return NO;
}
Dans mon affichage du contenu du contrôleur de initWithNibName: néant bundle: néant méthode que j'ai les éléments suivants du code de test...
- (id) initWithNibName: (NSString *) nibNameOrNil bundle: (NSBundle *) nibBundleOrNil {
self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
if (self) {
NSLog(@"%@", NSStringFromCGRect([[[UIApplication sharedApplication] keyWindow] frame]));
//This does not work.
}
return self;
}
Cela ne fonctionne pas en raison du fait que l'Application du Délégué de la fenêtre n'est pas encore la clé et visible.
Donc, ma question est donc; Quel est le nom de mon Application Délégué de la Classe de l'instance? Je sais que l'Application du Délégué Classe nom par défaut myApplicationNameAppDelegate
mais je suis après le instance nom. Je veux remplacer l'appel à [[UIApplication sharedApplication] keyWindow]
par quelque chose comme;
[myAppDelegatesInstanceName window].
En élargissant un peu, comment les méthodes d'accès dans d'autres objets cibles qui ne sont pas à la portée des descendants de l'objet faisant l'interrogation?
Comme je l'ai dit, je suis un noob total de tout cela et c'est probablement un autre muet noobie question, mais c'est celui que personne n'a encore semble avoir répondu d'une manière simple.
(Procédure - mon gazon à la maison - il y a une multitude de façons d'obtenir la fenêtre de choses vers le bas dans les autres niveaux de périmètre allant de la prise de la fenêtre globalement accessibles à l'ensemble du programme suite au passage en bas comme un paramètre spécifique à travers les différentes hiérarchies de fonctions - mais cet Objectif genre de choses semble s'écarter de, de procédure de la pratique).
Si quelqu'un peut aider, je lui en serais vraiment reconnaissant. Ce truc est absolument pas intuitif!
V. V.
OriginalL'auteur VectorVictor | 2011-04-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez accéder à l'application délégué à travers le singleton
UIApplication
exemple:C'est un cas particulier, bien que, parce que vous pouvez accéder à un objet (le
UIApplication
exemple) dont le délégué vous le savez, est l'objet auquel vous voulez accéder. Le cas général:Vous avez besoin pour passer une référence à l'objet cible de l'objet à partir duquel vous souhaitez accéder. Cela est parfois nécessaire, mais cela signifie également que vous introduire un couplage étroit entre ces deux objets, qui vous veulent l'éviter si vous le pouvez. Pensez donc à chaque cas et voir si il y a d'autres modèles possibles.
Désolé de paraître épais, Ole, mais je suis encore en train pas de joie. Si je comprends votre réponse correctement mon construire devrait ressembler à l'exemple suivant: [[(NumicatorAppDelegate *) [[UIApplication sharedApplication] délégué] fenêtre] image]. Est-ce correct?
Oui. Ne vous obtenez une erreur? Vous avez également à
#import NumicatorAppDelegate.h
.OriginalL'auteur Ole Begemann
L'utiliser pour Swift:
OriginalL'auteur Zaid Pathan
Swift 3
UIApplication.shared.windows.first
OriginalL'auteur Ted Lowery