これは本当に簡単なはずですが、動作させることができません。私は似たような記事をたくさん見たことがあり、解決策を試しましたが、誰も私のために働いていません。既存のセルのUILabelテキストを更新できません
基本的に、私はセル内のラベルのテキストを更新しようとしています。初めてセルを作成するときに機能しますが、セルをdequeueReusableCellWithIdentifier
から取得した後には機能しません。ちなみに、私は実際にDTGridView
を使用していますが、これはUITableView
と多少似ています。
- (DTGridViewCell *)gridView:(DTGridView *)gv viewForRow:(NSInteger)rowIndex column:(NSInteger)columnIndex {
EntityViewCell *cell = [self entityViewCellForGridView:gv];
// Find the single dimension index of the cell
NSUInteger index = [self indexOfGridView:gv row:rowIndex column:columnIndex];
[self configureCell:cell atIndex:index];
return cell;
}
- (EntityViewCell *)entityViewCellForGridView:(DTGridView *)gv {
NSString *CellIdentifier = @"EntityViewCell";
EntityViewCell *cell = (EntityViewCell *)[gv dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = (EntityViewCell *)[EntityViewCell loadCellWithReuseIdentifier:CellIdentifier];
}
return cell;
}
- (void)configureCell:(EntityViewCell *)cell atIndex:(NSInteger)index {
NSString *name = [[self.data objectAtIndex:index] valueForKey:@"name"];
if (!name) {
name = @"";
}
cell.title = name;
// Change the title of the cell if it is selected
if ([self.selectedCells objectForKey:[NSNumber numberWithInt:index]] != nil) {
cell.title = @"SELECTED";
}
}
そして、ここではEntityViewCellクラスから関連するコードです:ここに私のビューコントローラから該当するコードがある
- (void) setTitle: (NSString *) aTitle {
if (!label) {
label = [[UILabel alloc] initWithFrame: CGRectZero];
}
label.text = aTitle;
[self setNeedsLayout];
}
は、細胞のタイトルは正しく私のdata
配列内の値に設定されていますが、セルを選択した後で決してSELECTEDに変わりません。私はデバッグを通じて、aTitle
がセルがタッチされたときにSELECTEDに設定されているので、setTitle
が呼び出されていることを確認しました。なぜこのビューが表示されないのかわかりません。
ありがとうございます!
まあ、 'setTitle'プロパティを実装して、ラベルの' text'プロパティを修正しているので、それは問題ではないと思います。徹底させるために、私は同じ結果で、ラベルの 'text'プロパティを直接変更するようにView Controllerのコードを変更しました。 – Eric