Accéder à la Vue dans awakeFromNib?
J'ai essayé de définir une UIImageView couleur d'arrière-plan (voir ci-dessous) dans awakeFromNib
[imageView setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]];
Quand il n'a pas de travail, j'ai réalisé que c'est probablement parce que la vue n'a pas encore chargé, et je doit déplacer le changement de couleur viewDidLoad.
Je peux juste vérifier que j'ai ce droit?
gary
EDIT_002:
Je viens de commencer un projet fresh pour vérifier cela à partir d'un démarrage en mode minimal. J'ai installé le point de vue de la même comme je le fais toujours. Les résultats sont que les contrôles sont en effet mis d' (null) dans le awakeFromNib. Voici ce que j'ai:
CODE:
@interface iPhone_TEST_AwakeFromNibViewController : UIViewController {
UILabel *myLabel;
UIImageView *myView;
}
@property(nonatomic, retain)IBOutlet UILabel *myLabel;
@property(nonatomic, retain)IBOutlet UIImageView *myView;
@end
.
@synthesize myLabel;
@synthesize myView;
-(void)awakeFromNib {
NSLog(@"awakeFromNib ...");
NSLog(@"myLabel: %@", [myLabel class]);
NSLog(@"myView : %@", [myView class]);
//[myLabel setText:@"AWAKE"];
[super awakeFromNib];
}
-(void)viewDidLoad {
NSLog(@"viewDidLoad ...");
NSLog(@"myLabel: %@", [myLabel class]);
NSLog(@"myView : %@", [myView class]);
//[myLabel setText:@"VIEW"];
[super viewDidLoad];
}
De SORTIE:
awakeFromNib ...
myLabel: (null)
myView : (null)
viewDidLoad ...
myLabel: UILabel
myLabel: UIImageView
Je serais intéressé de savoir si cela devrait fonctionner, à partir de la documentation, il semble comme il devrait l'être, mais vu la façon dont j'ai l'habitude de mettre les choses en place, je ne comprends pas très bien pourquoi il n'est pas dans ce cas.
OriginalL'auteur fuzzygoat | 2010-04-27
Vous devez vous connecter pour publier un commentaire.
Une réponse de plus 🙂 On dirait que vous êtes l'obtention de ce comportement parce que le contrôleur de charge le point de vue paresseusement. La vue n'est pas chargé immédiatement, il est chargé de la première fois que quelqu'un appelle la
view
accesseur. Donc au moment où vous recevezawakeFromNib
la PLUME processus de chargement est terminé, mais pas pour les objets à l'intérieur de votre point de vue. Voir ce code:Cette des journaux:
Mais si vous avez la force de charger la vue:
Le journal des changements dans ce:
Si vous n'avez pas accès à la vue, puis faire un performSelector:withObject:délai d'appel de awakeFromNib. Un hack, mais efficace.
Toute solution si remplacement d'une UIView? Il n'a pas viewDidLoad. Peut-être à faire le performSelector hack.
J'ai essayé la même chose, mais encore obtenir
nil
pour les points de vente se lier avec une sous-classe de UIview.J'ai vérifié les prises en plaçant dispatch_after avec une durée de 5 sec, mais encore il me montre
nil
OriginalL'auteur zoul
Je crois que votre appel à super doit être la première ligne dans le awakeFromNib méthode, sinon les éléments ne seront pas en configuration encore.
super
devrait d'ailleurs être appelé en premier, mais il n'est pas utile dans ce cas.OriginalL'auteur raidfive
Je sais, ce post est un peu vieux, mais j'ai récemment eu un problème similaire et souhaitez partager sa solution avec vous.
Avoir sous-classé NSTextView, je voulais afficher la ligne de couleurs en alternant les commandes. Pour être en mesure de modifier les couleurs de l'extérieur, j'ai ajouté deux instance de vars à mon sous-classe, XNSStripedTableView:
Écraser highlightSelectionInClipRect: le truc pour régler la bonne couleur pour le clipRect.
{
}
Le seul problème est maintenant, où pour définir les valeurs initiales pour pColor et sColor? J'ai essayé awakeFromNib:, mais ce serait la cause de la débogueur à venir avec une erreur. Alors j'ai creusé le problème avec NSLog: et trouvé un facile mais solution viable: le réglage de la valeur initiale dans viewWillDraw:. Comme les objets ne sont pas créés à l'appel de la méthode la première fois, j'ai dû vérifier néant.
}
Je ne pense que cette solution est très agréable 🙂 même si l'on peut sélectionner à nouveau les noms de pColor et sColor peut être ajustée pour être plus "lisible".
OriginalL'auteur Living Skull
Dans le cas où vous êtes à l'aide d'une sous-classe UIView au lieu d'une sous-classe UIViewController, vous pouvez remplacer
loadView
méthode:OriginalL'auteur lucaslt89
Êtes-vous sûr que les objets ne sont pas
nil
?NSAssert
ouNSParameterAssert
sont vos amis:Si les objets sont vraiment initialisé, essayez de vous connecter leur adresse et assurez-vous que les instances qui apparaissent dans
viewDidLoad
sont les mêmes que ceux deawakeFromNib
:Si les chiffres sont les mêmes, vous pouvez créer une catégorie pour définir un point d'arrêt sur
setBackgroundColor
et coup d'oeil dans la trace de la pile pour voir ce qu'il se passe:Vous pouvez faire la même truc à l'aide d'une sous-classe personnalisée:
Vous allez maintenant configurer votre
UIViewObject
être de classePeekingView
dans Interface Builder et vous saurez quand quelqu'un essaie de définir l'arrière-plan. Ce doit attraper le cas où quelqu'un remplace le fond d'écran change après l'initialisation de la vue dansawakeFromNib
.Mais je présume que le problème sera beaucoup plus simple, c'est à dire.
imageView
est probablementnil
.Salut Zoul, les contrôles étaient en effet nul, (Voir Edit_002 ci-dessus)
OriginalL'auteur zoul