1

私はこれを数回出てきましたが、毎回「エレガントな」解決策を見つけることはありません.

問題:、 の顧客がいUITableViewCellます。そのセルには. のデフォルトのテキストの色は黒です。テキストの色を灰色にする必要がある行のインデックスの配列があります。s の色を設定できるpublic メソッドが私の中にあります。XIBInventoryCustomCellUILabelsUILabelUILabelInventoryCustomCellUILabel

その public メソッドは次のようになります。

- (void)setCellAdded:(BOOL)cellAdded {

    UIColor *cellTextColor;
    if (cellAdded) {
        self.thumbImageView.alpha = 0.5f;
        cellTextColor = [UIColor lightGrayColor];
    } else {
        self.thumbImageView.alpha = 1.0f;
        cellTextColor = [UIColor blackColor];
    }

    self.titleLabel.textColor = cellTextColor;
    self.partNumberLabel.textColor = cellTextColor;
    self.priceLabel.textColor = cellTextColor;
    self.quanityLabel.textColor = cellTextColor;
    self.addButton.titleLabel.textColor = cellTextColor;
}

UITableViewControllerのクラスでは、クラスをXIB.

[self.inventoryListTable registerNib:[UINib nibWithNibName:@"InventoryCustomCell" bundle:nil] forCellReuseIdentifier:@"InventoryCustomCellID"];

私のcellForRowAtIndexPath中で私はそれを次のように設定しました:

InventoryCustomCell *cell = (InventoryCustomCell *)[tableView dequeueReusableCellWithIdentifier:inventoryCellID forIndexPath:indexPath];

.....
Product *product = .. is grabbed from NSFetchedResultsController

if ([addedProducts containsObject:product.objectID])
     [cell setCellAdded:YES];
else
     [cell setCellAdded:NO];

return cell;

ここで、セル ラベルの色を灰色に設定するためにsetCellAdded、右側のブロックにブレークポイントを追加すると入力されます。ifだから私はそれが実際に呼び出されていることを知っています。

ここでの問題は、テーブル ビューがセルを再利用しようとしているということです。それらはすべて同じ識別子を持っているため、どのセルをグレーにする必要があり、どのセルをグレーにするべきではないかはわかりません。しかし、その場合、いくつかのセルがランダムにグレー表示さsetCellAddedれ、最初に呼び出された後ではないセルが表示されることが予想されます。そうではありません。セルが灰色に変わることはありませんが、セルを灰色にするという呼び出しはずっと続きます。

デフォルトの s を使用していた場合、おそらく黒/灰色のものをUITableViewCell別々に用意するでしょう。私は単一のペン先を登録する必要がcellIdentifierあるカスタムを使用しているため、ファイルを 1 つだけ保持している間はこの方法を使用できません。UITableViewCellcellIdentifierXIB

私が考えた唯一のことは、同じセル ビューで新しい XIB を作成し、すべてのラベルを灰色で追加した場合です。次に、2つのcellIdentifierアプローチを使用できますが、これはハッキーに思えます。

4

1 に答える 1

0

カスタム セル クラスの .h ファイルに UILabels のプロパティを追加するだけです。次に、tableView:cellForRowAtIndexPath:次のようなことを行います。

InventoryCustomCell *cell = (InventoryCustomCell *)[tableView dequeueReusableCellWithIdentifier:inventoryCellID forIndexPath:indexPath];
cell.yourTextLabel.textColor = [UIColor grayColor];

return cell;
于 2013-08-01T20:41:44.040 に答える