Невозможно установить текстовое поле на UILabel
-
06-07-2019 - |
Вопрос
Я создал класс UITableCellView
с именем NoteCell
. Заголовок определяет следующее:
#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
В реализации у меня есть следующий код для метода 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];
}
Не удается установить текстовое поле UILabel
, и вывод сообщений журнала:
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)
Я также попытался установить текстовое поле UILabel
, используя следующий синтаксис:
[self.noteTextLabel setText:newNote.noteText];
Похоже, это не имеет значения.
Любая помощь будет высоко ценится.
Решение
Вы где-нибудь настраивали свой noteTextLabel? Для меня это выглядит так, что вы отправляете сообщения с нулевым объектом. Когда ваша ячейка создана, noteTextLabel равен нулю. Если вы никогда не устанавливаете его, вы в основном делаете следующее:
[nil setText: newNote.noteText];
И когда вы позже попытаетесь получить к нему доступ, вы делаете это:
[nil text];
Который вернет ноль.
В вашем методе -initWithFrame: reuseIdentifier:
вам нужно явно создать ваш noteTextLabel и добавить его в качестве подпредставления в представление содержимого вашей ячейки:
self.noteTextLabel = [[[UILabel alloc] initWithFrame: CGRectMake(0, 0, 200, 20)] autorelease];
[self.contentView addSubview: self.noteTextLabel];
Тогда это должно сработать.
Кроме того, в качестве стилистической заметки я бы сделал свойство
для noteTextLabel доступным только для чтения, поскольку вам нужно только получить доступ к нему вне класса, но никогда не устанавливайте его.