カスタムUITableViewCellクラスを作成し、layoutSubviewsメソッドを使用してカスタムラベルを追加しました。このように:カスタムテーブルセルにUILabelサブビューを追加すると、ラベルテキストが画面上で更新されない
- (void)layoutSubviews
{
[super layoutSubviews];
if (statusLabel == nil)
{
statusLabel = [[UILabel alloc]initWithFrame:CGRectMake(430.0, 10.0, 100.0, 20.0)];
[statusLabel setTextAlignment:UITextAlignmentRight];
[statusLabel setText:@"Status, set in code"];
statusLabel.tag = 1;
[self.contentView addSubview:statusLabel];
}
}
ご覧のとおり、ラベルの最初のテキストを「ステータス、コードで設定」に設定しました。私はそうのように、cellForRowAtIndexPathメソッドでは、このカスタムラベルのテキストを設定し、テーブルビューコントローラで
:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
int index = [indexPath row];
NSString *introducerString =[introducers objectAtIndex:index];
NSArray *parts = [introducerString componentsSeparatedByString:@","];
static NSString *MyIdentifier = @"Requester";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[[DanceCardCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:MyIdentifier] autorelease];
}
UIImage *image = [UIImage imageNamed:@"1.jpg"];
[cell.imageView setImage:image];
cell.textLabel.text = [parts objectAtIndex:1];
cell.detailTextLabel.text = @"Some text";
UILabel *statusLabel = (UILabel *)[cell viewWithTag:1];
statusLabel.text = @"Did it!";
return cell;
}
私は2つのボタンのどちらに応じて、2つのリストを表示するには、1つのテーブルビューを使用していますが押された。ボタンを押すと、適切なテーブルビューコントローラがテーブルビューにアタッチされ、reloadDataメソッドが呼び出されて新しいデータの表示がトリガされます。新しいデータは表示されますが、カスタムラベルのテキストには「Did it!」と表示されます。私はリストを二度切り替えるまで "Status、set in code ..."と読みます。
カスタムラベルの新しいテキストをすぐに更新するにはどうすればよいですか?私は公式のドキュメンテーションをチェックしており、カスタムコンテンツを更新した後にセルの表示をリフレッシュするための参照を見つけることができません。あなたは、細胞を初期化してすぐに内部のタグ1とstatusLabelを見つけようとしているhttp://www.dsbsystems.co.uk/images/xcode1.png
Jesper、あなたは最高です! –
ありがとうございます。ビューを遅延初期化するという考えは悪くないが、大きなビューに適用すると効果的です。セルが作成されると、ラベルがすぐに必要になることがわかります。 – Jesper