2010-12-17 8 views
0

これは本当に簡単なはずですが、動作させることができません。私は似たような記事をたくさん見たことがあり、解決策を試しましたが、誰も私のために働いていません。既存のセルの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が呼び出されていることを確認しました。なぜこのビューが表示されないのかわかりません。

ありがとうございます!

答えて

0

私はこれををDTDataGridreloadDataの最後に追加することでこれを解決できました。なぜこれが必要なのか分かりません(そして私のセルのsetTitleにそれを加えても動作しません)。

私はここで効率が少し心配ですが、私はこれを処理するためのより良い方法はわかりません(私はかなりiOSに慣れています)。現在、私はセルが選択されるたびにreloadDataに電話をかけ、をDTDataGridに追加したので、毎回データグリッド全体が再描画されます。もっと良い方法があるはずです...どんなアイデアですか?

0

上部コードではプロパティのタイトルを変更し、下部のコードではプロパティのテキストを変更しています。これが問題だろうか?

+0

まあ、 'setTitle'プロパティを実装して、ラベルの' text'プロパティを修正しているので、それは問題ではないと思います。徹底させるために、私は同じ結果で、ラベルの 'text'プロパティを直接変更するようにView Controllerのコードを変更しました。 – Eric

関連する問題