UILabelにテキストフィールドを設定できません
-
06-07-2019 - |
質問
NoteCell
という UITableCellView
クラスを作成しました。ヘッダーは以下を定義します:
#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をどこかに設定しましたか?これが私に見えるのは、nilオブジェクトをメッセージングしているということです。セルが作成されるとき、noteTextLabelはnilです。設定しない場合は、基本的に次のことを実行しています:
[nil setText: newNote.noteText];
また、後でアクセスしようとすると、次のようになります:
[nil text];
nilを返します。
-initWithFrame:reuseIdentifier:
メソッドで、noteTextLabelを明示的に作成し、サブビューとしてセルのコンテンツビューに追加する必要があります。
self.noteTextLabel = [[[UILabel alloc] initWithFrame: CGRectMake(0, 0, 200, 20)] autorelease];
[self.contentView addSubview: self.noteTextLabel];
これで動作するはずです。
また、スタイル上の注意として、noteTextLabelの property
を読み取り専用にします。クラスの外部からのみアクセスしたいので、決して設定しないでください。
所属していません StackOverflow