2011-09-24 4 views
3

Si je substitue la méthode loadView, loadView sera appelé s'il existe un fichier nib. Si je ne surcharge pas loadView et qu'il y a un fichier nib, sera-t-il appelé?Est-ce que loadView sera appelé s'il y a un fichier nib?

+0

Pour votre information, vous devez marquer la réponse que vous préférez comme acceptée. –

Répondre

8

Oui, loadView est chargé de charger automatiquement les fichiers nib à partir de groupes connus en fonction du nom de classe du contrôleur de vue. Si vous remplacez loadView et n'appelez pas [super loadView], aucune pointe ne sera chargée. La classe UIViewController appelle loadView lorsque sa propriété view est appelée et est nulle.

Notez également que le remplacement de loadView et l'appel de super n'est probablement pas ce que vous voulez. loadView est pour définir la propriété self.view, c'est tout. Tout le reste doit se produire dans viewDidLoad etc.

+0

Que faire s'il n'y a pas d'affichage dans le fichier nib? Est-ce que loadview sera appelé s'il y a une vue dans le fichier nib? – Terry

+0

'loadView' est toujours appelé. Si la pointe n'a pas de propriété 'view' ou fait référence à des IBOutlets qui ne sont pas présents dans votre contrôleur de vue, une exception est levée. Je n'ai pas vérifié, mais je suis sûr que l'exception arrive quand 'loadView' appelle UINib après avoir trouvé une plume correspondant à son nom de classe ou en chargeant la plume spécifiée dans' initWithNibName: '. –

0

Oui:

@implementation iPhoneHomeViewController 

- (void)loadView { 
    DEBUGLOG(@"view = %@, superview = %@", [self valueForKey:@"_view"], [[self valueForKey:@"_view"] superview]); 
    [super loadView]; 
} 

Console:

GNU gdb 6.3.50-20050815 (Apple version gdb-1705) (Fri Jul 1 10:50:06 UTC 2011) 
Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU 
General Public License, and you are welcome to change it and/or distribute copies of it 
under certain conditions. Type "show copying" to see the conditions. There is absolutely 
no warranty for GDB. Type "show warranty" for details. This GDB was configured as 
"x86_64-apple-darwin".sharedlibrary apply-load-rules all Attaching to process 1671. 

[Line: 40] -[iPhoneHomeViewController loadView]: view = (null), superview = (null) 
0

Oui. La vue de chargement sera toujours appelée sans tenir compte du paquet ou non. loadView aura la tâche de charger la vue pour UIViewController qui peut provenir de n'importe quelle source.

Ainsi, il faut rechercher des vues de deux façons

1. Vérifiez la propriété nibFile qui peut être réglé si vous avez appelé initWithNibName: bundle: ou si vous avez storyboard - le storyboard stocke toutes les vues créées à l'intérieur d'un fichier nib aussi

2. Si vous ne définissez pas la plume à partir de e Ensuite, vous avez l'intention de créer des vues vous-même. Dans ce cas, vous pouvez définir cette vue pour afficher la propriété d'affichage du contrôleur ultérieurement.

Questions connexes