2010-06-04 5 views
2

Je souhaite implémenter une méthode d'initialisation personnalisée pour ma sous-classe UIViewController afin de «remplacer» la méthode initWithNibName.Méthode d'initialisation personnalisée UIVIewController

Voici le code: (probablement parce que le xib est pas encore chargé)

- (id) initWithMessage:(NSString *)message { 
    if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) { 
     label.text = message; 
    } 

    return self; 
} 

L'étiquette est chargé à partir xib mais à ce stade, la référence à l'étiquette est nulle. Est-ce que quelqu'un sait une solution pour cela? Merci

Répondre

11

Je sais que c'est une vieille question, mais la bonne réponse est d'utiliser la méthode viewDidLoad pour effectuer une configuration supplémentaire après le chargement de la vue. La vue n'est pas chargée tant que cela n'est pas nécessaire et peut être déchargée lorsqu'un avertissement de mémoire est reçu. Pour cette raison, la vue d'un contrôleur de vue ne doit pas être touchée dans une méthode init.

1

Vous devez déclarer le label par programme et l'initialiser dans l'init plutôt que de le faire depuis la plume.

Voici comment:

On suppose UILabel *label est une variable de classe avec @property et @synthesize définie pour elle.

- (id) initWithMessage:(NSString *)message { 

    if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) { 
     label = [[UILabel alloc] init]; 
     label.text = message; 
     [self.view addSubView:label]; 
    } 

    return self; 
} 

Libère l'étiquette dans la méthode "dealloc". J'espère que cela aide.

Questions connexes