Impossible de définir un champ de texte sur UILabel
-
06-07-2019 - |
Question
J'ai créé la classe UITableCellView
appelée NoteCell
. L'en-tête définit les éléments suivants:
#import <UIKit/UIKit.h>
#import "Note.h"
@interface NoteCell : UITableViewCell {
Note *note;
UILabel *noteTextLabel;
}
@property (nonatomic, retain) UILabel *noteTextLabel;
- (Note *)note;
- (void)setNote:(Note *)newNote;
@end
Dans l'implémentation, j'ai le code suivant pour la méthode setNote:
:
- (void)setNote:(Note *)newNote {
note = newNote;
NSLog(@"Text Value of Note = %@", newNote.noteText);
self.noteTextLabel.text = newNote.noteText;
NSLog(@"Text Value of Note Text Label = %@", self.noteTextLabel.text);
[self setNeedsDisplay];
}
Impossible de définir le champ de texte de UILabel
et la sortie des messages du journal est:
2008-11-03 18:09:05.611 VisualNotes[5959:20b] Text Value of Note = Test Note 1
2008-11-03 18:09:05.619 VisualNotes[5959:20b] Text Value of Note Text Label = (null)
J'ai également essayé de définir le champ de texte de UILabel
à l'aide de la syntaxe suivante:
[self.noteTextLabel setText:newNote.noteText];
Cela ne semble pas faire de différence.
Toute aide serait très appréciée.
La solution
Avez-vous configuré votre noteTextLabel n’importe où? Cela me semble que vous envoyez un objet nul à un message. Lorsque votre cellule est créée, noteTextLabel est nil. Si vous ne le configurez jamais, vous procédez comme suit:
[nil setText: newNote.noteText];
Et lorsque vous essayez ultérieurement d'y accéder, vous procédez comme suit:
[nil text];
Ce qui retournera nil.
Dans votre méthode -initWithFrame: reuseIdentifier:
, vous devez créer explicitement votre noteTextLabel et l'ajouter en tant que sous-vue à la vue du contenu de votre cellule:
self.noteTextLabel = [[[UILabel alloc] initWithFrame: CGRectMake(0, 0, 200, 20)] autorelease];
[self.contentView addSubview: self.noteTextLabel];
Ensuite, cela devrait fonctionner.
De plus, en tant que note stylistique, je voudrais lire la lecture seule de la propriété
de noteTextLabel, car vous ne souhaiterez y accéder que de l'extérieur de la classe. Ne le définissez jamais.