UITableViewCell mit alternativer Hintergrundfarbe in individuellen Zellen
Ich würde gerne den hintergrund meiner UITableViewCells haben eine andere Farbe jede zwei Zellen angezeigt, aber wenn ich scrolle nach unten und zurück, die Sie alle bekommen die gleiche Farbe. Wie bekomme ich diesen Effekt, wohl wissend, dass meine Zellen haben unterschiedliche contentView Größe (nach Ihrem Inhalt) ?
#define FONT_SIZE 14.0f
#define CELL_CONTENT_WIDTH 320.0f
#define CELL_CONTENT_MARGIN 20.0f
#define NAME_CELL_HEIGHT 20.0f
#import "CartCell.h"
@implementation CartCell
@synthesize nameLabel = _nameLabel;
@synthesize ingredientsLabel = _ingredientsLabel;
@synthesize myStore;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
myStore = [Store sharedStore];
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.nameLabel = nil;
self.ingredientsLabel = nil;
//SET "NAME" CELL
self.nameLabel = [[UILabel alloc] initWithFrame:CGRectZero];
[self.nameLabel setLineBreakMode:UILineBreakModeWordWrap];
[self.nameLabel setMinimumFontSize:FONT_SIZE];
[self.nameLabel setNumberOfLines:1];
[self.nameLabel setTag:1];
self.nameLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18];
[self.nameLabel sizeToFit];
self.nameLabel.backgroundColor = [UIColor clearColor];
[[self contentView] addSubview:self.nameLabel];
//SET "INGREDIENTS" CELL
self.ingredientsLabel = [[UILabel alloc] initWithFrame:CGRectZero];
[self.ingredientsLabel setLineBreakMode:UILineBreakModeWordWrap];
[self.ingredientsLabel setMinimumFontSize:FONT_SIZE];
[self.ingredientsLabel setNumberOfLines:0];
[self.ingredientsLabel setFont:[UIFont systemFontOfSize:FONT_SIZE]];
[self.ingredientsLabel setTag:2];
self.ingredientsLabel.backgroundColor = [UIColor clearColor];
[[self contentView] addSubview:self.ingredientsLabel];
if (myStore.cellBackgroundShouldBeLight == YES) {
NSLog(@"clear [in] ? %@", myStore.cellBackgroundShouldBeLight ? @"Yes" : @"No");
self.contentView.backgroundColor = [[UIColor alloc]initWithRed:87.0/255.0 green:168.0/255.0 blue:229.0/255.0 alpha:1];
myStore.cellBackgroundShouldBeLight = NO;
} else {
NSLog(@"clear [in] ? %@", myStore.cellBackgroundShouldBeLight ? @"Yes" : @"No");
self.contentView.backgroundColor = [[UIColor alloc]initWithRed:187.0/255.0 green:268.0/255.0 blue:229.0/255.0 alpha:1];
myStore.cellBackgroundShouldBeLight = YES;
}
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
//Configure the view for the selected state
}
@end
UPDATE:
Ich bin, wissen Sie versuchen, es in cellForRowAtIndexPath, wie es vorgeschlagen wurde, aber ich bekomme das gleiche Ergebnis: scrollen nach unten geklappt, das erste mal, aber dann scrollen bis wieder Durcheinander, die Zellen-Hintergrundfarbe.
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CartCell";
CartCell *cell = (CartCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Recipes *info = [_fetchedResultsController objectAtIndexPath:indexPath];
if (cell == nil)
{
cell = [[CartCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// if (!cell.nameLabel) {
// cell.nameLabel = (UILabel*)[cell viewWithTag:1];
// // cell.nameLabel = (UILabel*)[cell viewWithTag:1];
// }
// if (!cell.ingredientsLabel)
// cell.ingredientsLabel = (UILabel*)[cell viewWithTag:2];
CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
CGSize size = [info.ingredients sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
[cell.nameLabel setFrame:CGRectMake(10, 10, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), NAME_CELL_HEIGHT)];
[cell.ingredientsLabel setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN + NAME_CELL_HEIGHT, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))];
//SETTING TEXT CONTENT
cell.nameLabel.text = info.name;
cell.ingredientsLabel.text = info.ingredients;
//SETTING BACKGROUND COLOR
// UIView *lab = [[UIView alloc] initWithFrame:cell.frame];
// [lab setBackgroundColor:[UIColor blueColor]];
if (myStore.cellBackgroundShouldBeLight == YES) {
NSLog(@"clear? %@", myStore.cellBackgroundShouldBeLight ? @"Yes" : @"No");
cell.contentView.backgroundColor = [[UIColor alloc]initWithRed:87.0/255.0 green:84.0/255.0 blue:229.0/255.0 alpha:1];
// cell.backgroundView = lab;
// ingredientsLabel.backgroundColor = [UIColor clearColor];
// nameLabel.backgroundColor = [[UIColor alloc]initWithRed:87.0/255.0 green:168.0/255.0 blue:229.0/255.0 alpha:1];
// [cell setBackgroundColor: [[UIColor alloc]initWithRed:87.0/255.0 green:168.0/255.0 blue:229.0/255.0 alpha:1]];
// [cell setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
myStore.cellBackgroundShouldBeLight = NO;
} else {
// cell.contentView.tag = 2;
NSLog(@"clear? %@", myStore.cellBackgroundShouldBeLight ? @"Yes" : @"No");
cell.contentView.backgroundColor = [[UIColor alloc]initWithRed:187.0/255.0 green:184.0/255.0 blue:229.0/255.0 alpha:1];
myStore.cellBackgroundShouldBeLight = YES;
}
return cell;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es sehr einfach, die indexPath sagt Ihnen alles, was Sie brauchen, um wissen. Wenn die indexPath.Zeile selbst ist, dann verwenden Sie eine Farbe. Wenn die indexPath.Zeile ungerade ist, verwenden Sie eine andere Farbe.
Ihre Methode hat Probleme, weil blind vorausgesetzt Zellen werden gebeten, in abwechselnden Paaren ist eine falsche Annahme. Der tableView Fragen konnte für die Zellen in beliebiger Reihenfolge wählt. In deinem Beispiel, ich glaube Zellen könnte gefragt werden, wie folgt. First, 0, 1,..., 9 sind gefragt. Als Nächstes scrollen Sie nach unten und 10, 11 und 12 geholt. An dieser Stelle 0, 1 und 2 haben den Weg aus dem Bildschirm. Sie Blättern Sie zurück und 2 gefragt ist, aber oh Nein, dein Modell ist auf eine ungerade Zahl ist Wechsel, so bekommt man die falsche Farbe.
[UIColor colorWithRed...];
Verwenden Sie die
-willDisplayCell
Methode.Den geeigneten Ort, um zu ändern Ihre Zelle Hintergrundfarbe wäre die "
cellForRowAtIndexPath:
" - Methode, bei der Zellen-Daten ausgefüllt wird und zurück in die Tabellenansicht.Einen Weg, dies zu tun wäre: Wenn die Daten geht in die Zelle, ändern Sie die Hintergrundfarbe, je nachdem, welche Zeile du gerade bist.
Legen Sie die Farbe auf der cellForRowAtIndexPath: nicht festlegen auf benutzerdefinierte Zelle.
Schauen was ich mit anpassen meine Tabelle
Vergangenheit, nachdem alle
#import
LinienÜberschrift ##Einfachste Weg, das zu ändern Farben