0

テーブルビューでセルを作成するときに次のコードを実行しました

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    Medicine *medicine = [self.fetchedResultsController objectAtIndexPath:indexPath];
    if ([medicine isDue] == 1)
    {
        [cell setBackgroundColor:[self dueColour]];
        NSLog(@"Due");
    }
    else if([medicine active] == [NSNumber numberWithInt:0])
    {
        [cell setBackgroundColor:[self inactiveColour]];
        NSLog(@"Inactive");
    }
    else
    {
        [cell setBackgroundColor:[UIColor whiteColor]];
        NSLog(@"Active");
    }
    [[cell textLabel] setText:[medicine name]];
    [[cell detailTextLabel] setText:[NSString stringWithFormat:@"Next Due: %@",[medicine nextDueDate]]];
}

これは問題ありませんが、問題またはアクティブなプロパティを変更すると、新しいセルの色が得られると期待していますが、新しいセルの色が得られますが、古い色がテキストのハイライトとして表示され、わかりませんどうして。期日と有効な薬を印刷するときのように、正しい色が割り当てられていることを知っています

2013-09-17 23:05:28.121 薬トラッカー[11611:907] 2013-09-17 期限

23:05:28.124 Medicine Tracker[11611:907] アクティブ

これは正しいですが、間違った色が指定されています

私が何を意味するかをよりよく示すかもしれない画像がありますここに画像の説明を入力

4

1 に答える 1

0

問題は、ラベルが独自の背景色を使用しているという事実です。

2 つのオプション。A. ラベル (テキスト) の背景色を透明に設定します。B. ラベルの背景色を、セルの背景全体に適用する色に設定します。

オプション A:

[[cell textLabel] setBackgroundColor:[UIColor clearColor]];
[[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];

オプション B:

UIColor *backgroundColorNew = nil; 
Medicine *medicine = [self.fetchedResultsController objectAtIndexPath:indexPath];
if ([medicine isDue] == 1)
{
    backgroundColorNew = [self dueColour];
    NSLog(@"Due");
}
else if([medicine active] == [NSNumber numberWithInt:0])
{
    backgroundColorNew = [self inactiveColour];
    NSLog(@"Inactive");
}
else
{
    backgroundColorNew = [UIColor whiteColor];
    NSLog(@"Active");
}
//set all visibile backgrounds to the new color
[cell setBackgroundColor:backgroundColorNew];
[[cell textLabel] setBackgroundColor:backgroundColorNew];
[[cell detailTextLabel] setBackgroundColor:backgroundColorNew];

[[cell textLabel] setText:[medicine name]];
[[cell detailTextLabel] setText:[NSString stringWithFormat:@"Next Due: %@",[medicine nextDueDate]]];

一方、オプション B は通常、透明度が余分なサイクルを必要とするため、表示パフォーマンスが高くなります。

于 2013-09-17T22:30:55.970 に答える