2010-11-09 6 views
0

Je suis totalement perdu avec superview, loadView(), viewDidLoad(), viewWillAppear().Comment créer une vue par programmation et définir son cadre en fonction de superview? (iphone)

Finalement, je veux définir la trame de mon contrôleur aux limites de superview et utiliser [self.view bounds] à mon viewDidLoad(). (Peut-être cela est impossible?)

est ici l'extrait de code qui me donne la douleur ..

// add the controller's view to the scroll view 
if (nil == controller.view.superview) { 
CGRect frame = scrollView.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0; 
    controller.view.frame = frame; 
    [scrollView addSubview:controller.view]; 
    // I'd like to set controller.view 's frame using superview(scrollView here). 
} 

Apparemment, nul == controller.view.superview appelle viewDidLoad du contrôleur.

J'utilisé pour accéder à [bornes de self.view] et de l'utiliser dans mon viewDidLoad
Comme je veux définir le cadre de vue après l'avoir ajouté à Superview, je suppose que je dois déplacer les codes qui utilise des limites [de self.view ] à un autre endroit.
Quel est le bon endroit pour passer à? Ou y a-t-il une meilleure approche?

Répondre

0

Le premier appel à controller.view et self.view déclenche automatiquement le mécanisme de chargement de la vue et la notification viewDidLoad pour chaque contrôleur de vue (je suppose self est un contrôleur de vue différent). Ainsi, les méthodes viewDidLoad pour chaque contrôleur seront appelées au début de cet extrait de code.

(loadView est une méthode pour vous de changer manuellement le processus de chargement de la vue. Vous ne devez pas appeler directement)

+0

ah merci, aurait dû être controller.view, j'ai foiré ça. J'ai édité ma question. en bref, puis-je définir le cadre d'une vue en utilisant sa vue d'ensemble et utiliser [les limites de self.view] au moment où viewDidLoad est appelé? – eugene

0

je vais résumer le problème et ma solution.

Le problème est, en substance, que l'ordre de deux appels de fonction: viewDidLoad et addSubview ne peut pas être commuté. Ce que je veux est,
définir le cadre de l'enfant selon superview qui ne pourrait être fait qu'après addSubview.
Mais en même temps, sur viewDidLoad, j'ai les [limites auto-vues] appropriées.

Étant donné que viewDidLoad doit être appelé avant addSubview, viewDidLoad ne peut pas avoir les bonnes informations [self.view bounds].

Solution, J'ai déclaré une variable superViewBounds et les ai définies après l'allocation du contrôleur de vue mais avant la création de la vue. Et utilisé la variable bounds dans viewDidLoad. Une chose reste, je ne sais toujours pas comment je pourrais obtenir la vue principale (je pense que cela s'appelle la vue de navigation) bounds/frame info de navigationViewController.

Espérons que cela aide, et espérons que quelqu'un publiera une meilleure solution s'il y a.

Questions connexes