it-swarm.com.de

Benutzerdefinierter UITableViewCell-Auswahlstil?

Wenn ich auf UITableViewCell klicke, wird der Hintergrund (die Bereiche, die mein Hintergrundbild nicht abdeckt) blau, wenn ich auf die Zelle klicke. Außerdem werden alle UILabels in der Zelle weiß, wenn darauf geklickt wird, was ich will.

Was ich jedoch nicht möchte, ist der blaue Hintergrund, wenn ich darauf klicke, aber wenn ich selectionstylenone mache, verliere ich die hervorgehobenen Farben für die UILabels in der Zelle.

Gibt es eine Möglichkeit, den blauen Hintergrund einfach zu entfernen, wenn die Zelle angeklickt wird, aber die hervorgehobenen Farben der UILabels beizubehalten?

74
SimplyKiwi

Sie können dies wie folgt tun. Setzen Sie den Auswahlstil Ihrer Tabellenzelle auf UITableViewCellSelectionStyleNone. Dadurch wird die blaue Hintergrundmarkierung entfernt. Um die Hervorhebung der Textbeschriftung so zu gestalten, wie Sie es möchten, erstellen Sie anstelle der standardmäßigen UITableViewCell-Klasse eine Unterklasse von UITableViewCell und überschreiben Sie die Standardimplementierung von setHighlighted:animated mit Ihrer eigenen Implementierung hervorgehobener Zustand.

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    if (highlighted) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}
166
jonkroll

Wenn Sie vor iOS7 arbeiten, wählen Sie den Stil für die Zellenauswahl aus

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Sonst, lass es von UITableViewCellSelectionStyleDefault

Dann:

UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView =  selectedView;

Dieser Code wird ordnungsgemäß funktionieren

70
Alfa

Sie können die folgenden Delegatmethoden verwenden, nachdem Sie den Auswahlstil auf Keine festgelegt haben:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

Implementieren Sie Ihren Code hier

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
    [cell.lbls setTextColor:[UIColor whiteColor]];
    return indexPath;
}
16
Scar

In cellForRowAtIndexPath verwenden Sie diesen Code:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

[cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels

Ich hoffe, das funktioniert für Sie.

Viel Spaß beim Codieren :)

12
Mrunal

Um diese Arbeit zu erhalten, müssen Sie den Auswahlstil auf UITableViewCellSelectionStyleNone setzen. Anschließend sollten Sie die Methode setSelected:animated: überschreiben, um das gewünschte Ergebnis zu erhalten. Dasselbe tut der automatische Auswahlmechanismus von iOS, wenn Sie die blaue (oder graue) Auswahl sehen. 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if (selected) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}

Sie können dies auch auf andere Weise anpassen, z. durch Ändern des UITableViewCell-Hintergrunds usw.

11
who9vy

Überschreiben der folgenden Funktionen in Ihrer Unterklasse von UITableViewCell.

override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }
4
superarts.org

Um das Verhalten des Standardauswahlstils anzupassen, müssen Sie sowohl setHighlighted:animated: als auch setSelected:animated: überschreiben. Möglicherweise möchten Sie diesen Code in eine gemeinsam genutzte Methode verschieben, um doppelten Code zu vermeiden.

override func setHighlighted(highlighted: Bool, animated: Bool) {

    setAsSelectedOrHighlighted(highlighted, animated: animated)
    super.setHighlighted(highlighted, animated: animated)
}

override func setSelected(selected: Bool, animated: Bool) {

    setAsSelectedOrHighlighted(selected, animated: animated)
    super.setSelected(selected, animated: animated)
}

func setAsSelectedOrHighlighted(selectedOrHighlighted: Bool, animated: Bool) {

    let action = {
        // Set animatable properties
    }

    if animated {
        UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseInOut, animations: action, completion: nil)
    }
    else {
        action()
    }
}
2
Logan Gauthier

Überschreiben Sie in Ihrer benutzerdefinierten Zelle die Standardimplementierung von awakeFromNib & setSelected: 

- (void)awakeFromNib {
    // Initialization code
    UIImageView * imageView = [[UIImageView alloc] initWithFrame:self.bounds];
    imageView.image = [UIImage imageNamed:@"cell_selected_img"];
    self.selectedBackgroundView = imageView;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
    if (selected) {
        self.lblCustomText.textColor = [UIColor whiteColor];
    } else {
        self.lblCustomText.textColor = [UIColor blackColor];
    }
}

Stellen Sie außerdem sicher, dass der AuswahlstilNICHTauf None eingestellt ist.

0
zeeawan

Ich konnte es nur so zum Laufen bringen:

- (void)awakeFromNib {
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor colorWithRed:(55.0/255.0) green:(163.0/255.0) blue:(237.0/255.0) alpha:1.0];
    bgColorView.layer.masksToBounds = YES;
    self.selectedBackgroundView = bgColorView;
}
0
Fabricio PH

Sie können auch contentView.alpha verwenden. Hier ist das Beispiel.

Legen Sie zunächst den Auswahlstil für Ihre Zelle fest:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Als Nächstes überschreiben Sie diese Methode in benutzerdefinierten Zellklassen mit einem Animationsbeispiel:

  - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlighted animated:animated];

    if (highlighted) {
        [UIView animateWithDuration:0.15f animations:^{
            self.contentView.alpha = 0.5f;
        }];
    } else {
        [UIView animateWithDuration:0.35f animations:^{
            self.contentView.alpha = 1.f;
        }];
    }
  }
0
Alex Kolovatov