2009-10-14 5 views
1

J'essaie de remplacer une vue racine UIViewController par une UIView sous-classée.Remplacement d'une vue racine UIViewController par ma propre vue

Dans la classe iPhone SDK UIViewController référence, au sein de son section Vue d'ensemble, cela est indiqué:

Vous utilisez chaque instance de UIViewController pour gérer une vue plein écran. Pour un contrôleur de vue simple, cela implique la gestion de la hiérarchie de vue responsable de la présentation du contenu de votre application. Une hiérarchie de vue typique consiste en une vue racine (une référence disponible dans la propriété view de cette classe) et une ou plusieurs sous-vues présentant le contenu réel.

En suivant le lien sur la propriété de vue, il indique alors:

Si votre contrôleur de vue ne dispose pas d'un contrôleur de vue associée, vous devez remplacer la méthode de loadview et l'utiliser pour créer la vue racine et toutes ses sous-vues.

Si ce code a été placé dans loadview serait-il créer la vue racine en supposant que j'utilisais ma propre sous-classe de UIView appelé MyView:

self.view = [MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 

Merci :) //

Répondre

3

Vous avez raison . La fonction loadView est appelée lorsque la vue doit être affichée et la propriété view de viewController est la vue affichée lors de l'utilisation de fonctions telles que presentModalViewController:animated:. Si vous chargez votre vue à partir d'un NIB au lieu d'utiliser loadView, modifiez simplement la classe de la vue à votre sous-classe personnalisée dans l'onglet Propriétés de cette vue.

+0

Merci, c'est génial // :) – Spanky

+0

Les documents pour 'loadView' indiquent ce qui suit:' Vous pouvez remplacer cette méthode afin de créer vos vues manuellement. Si vous choisissez de le faire, affectez la vue racine de votre hiérarchie d'affichage à la propriété view. Les vues que vous créez doivent être des instances uniques et ne doivent pas être partagées avec un autre objet contrôleur de vue. Votre implémentation personnalisée de cette méthode ne doit pas appeler super. » –

1

Vous devez noter que tout ce que vous définissez la propriété view est conservé. Donc, vous devez utiliser soit

self.view = [[[MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]; 

ou

MyView *v = [[MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
self.view = v; 
[v release]; 

pour équilibrer cela.

Questions connexes