it-swarm.com.de

Wie setze ich die UITableViewCellSelectionStyle-Eigenschaft auf eine benutzerdefinierte Farbe?

Ich entwickle eine iPhone-Anwendung. In meiner Tabellenansicht wollte ich eine benutzerdefinierte Farbe für den Zellenauswahlstil. Ich habe die UITableViewCell-Klassenreferenz gelesen , aber für den Auswahlstil sind nur drei Konstanten definiert (Blau, Grau, Keine). Ich sah eine Anwendung, die eine andere Farbe als die in der Referenz definierten verwendete.

Wie können wir eine andere Farbe als die in der Referenz definierten verwenden?

Danke im Voraus.

35
Amit Vaghela

Die beste Möglichkeit zum Festlegen der Auswahl besteht darin, die selectedBackgroundView in der Zelle festzulegen, wenn Sie sie erstellen.

d.h.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectedCellBackground.png"]] autorelease];
    }

    // configure the cell
}

Das verwendete Bild sollte einen Nizza-Verlauf haben (wie die Standardauswahl). Wenn Sie nur eine flache Farbe wünschen, können Sie anstelle von UIImageView eine UIView verwenden und die backgroundColor auf die gewünschte Farbe einstellen.

Dieser Hintergrund wird automatisch angewendet, wenn die Zeile ausgewählt wird.

64
Matt Gallagher

Das Festlegen von selectedBackgroundView scheint keine Auswirkung zu haben, wenn cell.selectionStyle auf UITableViewCellSelectionStyleNone eingestellt ist. Wenn ich nicht eingestellt habe, verwendet der Stil nur das Standardgrau. 

Mit dem ersten Vorschlag, der den benutzerdefinierten UIView in die Zelle einfügt, wird die Zelle zwar bearbeitet, jedoch nicht angezeigt, wenn die Zelle berührt wird. Erst nachdem die ausgewählte Aktion abgeschlossen ist, ist es zu spät, da ich zu einer neuen Ansicht übergehe. Wie kann ich die ausgewählte Ansicht in der Zelle vor Beginn des ausgewählten Vorgangs anzeigen lassen?

24
Paul

Wenn Sie eine UITableViewCell-Unterklasse erstellt haben, können Sie die verschiedenen Elemente der Zelle anpassen, indem Sie Folgendes überschreiben:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    if(highlighted) {
        self.backgroundColor = [UIColor redColor];
    } else {
        self.backgroundColor = [UIColor clearColor];
    }

    [super setHighlighted:highlighted animated:animated];
}

BEARBEITEN für iOS7: Wie Sasho auch angegeben hat 

cell.selectionStyle = UITableViewCellSelectionStyleNone
12
Willster

Ich habe einige der oben genannten Möglichkeiten ausprobiert und Ich ziehe es vor, meine eigene Unterklasse von UITableViewCell zu erstellen und die Methoden touchesBegan/touchesCancelled/touchesEnded zu überschreiben. Ignorieren Sie dazu alle selectedBackgroundView- und highlightedColor-Eigenschaften in der Zelle und legen Sie stattdessen diese Farben manuell fest, wenn eine der oben genannten Methoden aufgerufen wird. Wenn Sie beispielsweise festlegen möchten, dass die Zelle einen grünen Hintergrund mit rotem Text hat, versuchen Sie Folgendes (innerhalb Ihrer benutzerdefinierten Zellunterklasse):

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //Set backgorund
    self.backgroundColor = [UIColor themeBlue];

    //Set text
    self.textLabel.textColor = [UIColor themeWhite];

    //Call super
    [super touchesBegan:touches withEvent:event];
}

Damit dies funktioniert, müssen Sie Folgendes einstellen:

self.selectionStyle = UITableViewCellSelectionStyleNone;

Andernfalls erhalten Sie zunächst den aktuellen Auswahlstil.

EDIT: Ich schlage vor, die touchesCancelled-Methode zu verwenden, um die ursprünglichen Zellenfarben wiederherzustellen, aber die touchesEnded-Methode einfach ignorieren.

7
Charles Marsh

Überschreiben Sie didSelectRowAtIndexPath: und zeichnen Sie eine UIView einer Farbe Ihrer Wahl und fügen Sie sie hinter dem UILabel in die Zelle ein. Ich würde es so machen:

UIView* selectedView; //inside your header

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

  UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
  selectedView = [[UIView alloc] initWithFrame:[cell frame]];
  selectedView.backgroundColor = [UIColor greenColor]; //whatever

  [cell insertSubview:selectedView atIndex:0]; //Tweak this as necessary
  [selectedView release]; //clean up

}

Sie können diese Ansicht nach Belieben animieren, wenn sie nicht ausgewählt ist und Ihre Anforderungen erfüllt.

2
Jeffrey Forbes

Sublcass UITableViewCell und überschreiben setHighlighted:animated:

Sie können eine benutzerdefinierte Farbe für die Auswahl festlegen, indem Sie backgroundColor einstellen (siehe Antwort von WIllster):

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    if(highlighted) {
        self.backgroundColor = [UIColor redColor];
    } else {
        self.backgroundColor = [UIColor clearColor];
    }

    [super setHighlighted:highlighted animated:animated];
}

Sie können ein benutzerdefiniertes Hintergrundbild definieren, indem Sie die backgroundView-Eigenschaft festlegen:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    if( highlighted == YES )
        self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"seasonal_list_event_bar_default.png"]];
    else
        self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"seasonal_list_event_bar_active.png"]];


    [super setHighlighted:highlighted animated:animated];
}
1
bentford

Verwenden Sie den folgenden Code, um eine benutzerdefinierte Farbe hinzuzufügen. Um es transparent zu machen, verwenden Sie alpha: 0.0

cell.selectedBackgroundView = UIView(frame: CGRect.zero)
cell.selectedBackgroundView?.backgroundColor = UIColor(red:0.27, green:0.71, blue:0.73, alpha:1.0)

Wenn Sie eine benutzerdefinierte Farbe verwenden und der abgerundeten Ecke ein Aussehen verleihen möchten, verwenden Sie Folgendes:

cell.layer.cornerRadius = 8

Verwenden Sie dies auch für eine bessere Animation und ein besseres Gefühl

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    tableView.deselectRow(at: indexPath, animated: true)
}
0
Prateekro
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {  
// Set Highlighted Color  
if (highlighted) {  
self.backgroundColor = [UIColor colorWithRed:234.0f/255 green:202.0f/255 blue:255.0f/255 alpha:1.0f];
    } else {  
        self.backgroundColor = [UIColor clearColor];  
  }   
}
0
PK86
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // Add your Colour.
    SocialTableViewCell *cell = (SocialTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
    [self setCellColor:Ripple_Colour ForCell:cell];  //highlight colour
}

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // Reset Colour.
    SocialTableViewCell *cell = (SocialTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
    [self setCellColor:Ripple_Colour ForCell:cell]; //normal color

}

- (void)setCellColor:(UIColor *)color ForCell:(UITableViewCell *)cell {
    cell.contentView.backgroundColor = color;
    cell.backgroundColor = color;
}
0
Ishwar Hingu