viewDidLoad pour UIView?
Quel est le viewDidLoad
pour UIView
?
J'ai un UIView
avec xib. Je tiens à cacher l'un de ses sous-vues lorsqu'il est chargé.
J'ai essayé d'utiliser ce.
- (id)initWithCoder:(NSCoder *)aDecoder{
....
_theView.hidden = YES;
}
Mais la sous-vue _theView
est nul à ce point.
Cette réponse ne m'a pas aidé, parce que, au moment de la création de la UIViewController
, le UIView
n'est pas encore créé. Il est créé programaticly, plus tard.
- si votre UIView est "créé programaticly, plus tard", de retirer votre sous-vue à ce point
- Je veux que tout le code pertinent de la UIView, situé dans la classe de la UIView
- L'on a accepté la réponse est trompeuse. J'ai ajouté une réponse plus détaillée.
- merci de lire mon commentaire
Vous devez vous connecter pour publier un commentaire.
AwakeFromNib
n'est appelée que si la vue chargée de la plume de fichier.layoutSubviews
est appelée pour toutes les vues, vous pouvez ajouter bool_loaded = yes;
dans lelayoutSubviews
de la fonction et de savoir si le point de vue de chargement.layoutSubviews
ici.Essayer
-awakeFromNib
méthodeOu dans xib définir la propriété mode caché pour votre sous-vue
Accepté la réponse est trompeuse.
awakeFromNib sera toujours appelé, non seulement si une pointe est utilisée.
À partir de l'apple docs:
awakeFromNib:
Lien
Dans l'exemple suivant, j'ai utilisé seulement un storyBoard
Vous pouvez tester cela très facilement.
C'est notre ViewController:
ViewController.m:
RedView.m:
Afin d'impression:
Et bien sûr, le vert sera caché.
Edit:
awakeFromNib ne sera pas appelé si vous utilisez uniquement le code pour créer votre point de vue, mais vous pouvez appeler vous-même ou, mieux encore, de créer votre propre méthode.
Exemple, sans un StoryBoard (seul le code):
RedView.m:
ViewController.m:
Prepares the receiver for service after it has been loaded from an Interface Builder archive, or nib file.
donc il ne serait pas appelé, mais, vous pouvez simplement appeler votre auto! J'ai édité la réponse.UIView
sait. Vous pouvez créer une méthode différente à l'intérieur de la vue et de l'appeler à charge par exemple-(void)fooIsLoading
prepareForWhatever
plutôt la méthode qui rend le code plus clair.awakeFromNib
est beaucoup plus âgés que les story-boards, même âgés de plus de iOS, c'est pourquoi il a éventuellement nom trompeur, même si la plupart des story-boards sont utilisés de nos jours. Mais la documentation est claire, un Storyboard est une Interface Builder archive.-(void)fooIsLoading
. La réponse a été édité.layoutSubviews sera appel pour toutes les vues que vous pouvez définir vous voir comme caché là, au lieu de awakeFromNib.
Si vous utilisez xib ensuite, vous pouvez définir la valeur par défaut caché de la propriété.
Il n'y a pas une telle méthode en général. La question est, où est votre
_theView
en venir.Si votre point de vue, y compris ses sous-vue, est chargé à partir de la même plume/xib/storyboard ensuite, vous pouvez utiliser
awakeFromNib
qui sera appelé après que l'objet, la hiérarchie a été chargé à partir de l'archive, de sorte que votre_theView
doit être définie en tant que bien.Si votre vue est créée par programme, mais ne crée pas de la sous-vue pour
_theView
lui-même, cela signifie qu'il y a un endroit dans le code où vous ajoutez que le sous-vue. Dans ce cas, vous avez deux options_theView
de l'appelant après avoir ajoutéprepareForDisplay
de la méthode (ou similaire) sur votre point de vue de la classe et de l'appel qu'après votre point de vue a été créé et_theView
a été attribué. Dans ceprepareForDisplay
(ou le nom que vous choisissez) méthode, vous pouvez faire ce que vous voulez, par exemple, cacher_theView
.Je recommande de ne pas abuser
layoutSubviews
pour ce qu'il est destiné à un but différent et sera appelé à plusieurs reprises au cours de la durée de vie d'un point de vue, pas seulement une fois que vous le souhaitez. Oui, vous pouvez enregistrer qu'il a été appelé avant, mais je considère qu'un hack ainsi. Mieux créer votre propre méthode pour initialiser l'afficher dans une manière que vous voulez après l'avoir configuré correctement et l'appeler.