UITableView Komórka wybrała kolor?


319

Stworzyłem zwyczaj UITableViewCell. Widok tabeli pokazuje dane w porządku. Utknąłem w momencie, gdy użytkownik dotyka komórki widoku tabeli, a następnie chcę pokazać kolor tła komórki inny niż domyślne wartości [koloru niebieskiego] dla podświetlenia wyboru komórki. Używam tego kodu, ale nic się nie dzieje:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

Odpowiedzi:


365

Myślę, że byłeś na dobrej drodze, ale zgodnie z definicją klasy dla selectedBackgroundView:

Wartość domyślna to zero dla komórek w tabelach o prostym stylu (UITableViewStylePlain) i brak zero w przypadku tabel grup przekrojów UITableViewStyleGrouped).

Dlatego jeśli używasz tabeli w prostym stylu, musisz UIViewprzypisać -init nowy mający pożądany kolor tła, a następnie przypisać go do selectedBackgroundView.

Alternatywnie możesz użyć:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

jeśli wszystko, czego chciałeś, to szare tło, gdy komórka jest zaznaczona. Mam nadzieję że to pomoże.


1
Tę właściwość można również ustawić w serii ujęć, jeśli wolisz pozostawić rzeczy związane z widokiem do widoku.
IIllllll

1
Wersja Swift 3: cell.selectionStyle = .gray // Możesz także użyć .none, .blue lub .default
Sébastien REMY

6
Ta odpowiedź jest dość stara ... Czy coś się zmieniło w nowszych wersjach iOS? Mam tabelę w prostym stylu, a mój selectedBackgroundView NIE ma wartości zero. Co ciekawe zmiana tła backgroundColor w tym widoku nie ma żadnego efektu, zamiast tego muszę go zastąpić nowym UIView moim pożądanym tłem backgroundColor, aby działał.
ndreisg

Właśnie uratowałeś mnie przed całkowitym szaleństwem. Wielkie dzięki!
mrwheet

656

Nie ma potrzeby tworzenia niestandardowych komórek. Jeśli chcesz tylko zmienić wybrany kolor komórki, możesz to zrobić:

Cel C:

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor redColor];
[cell setSelectedBackgroundView:bgColorView];

Szybki:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.red
cell.selectedBackgroundView = bgColorView

47
To działa, ale w zgrupowanym UITableView utracone są zaokrąglone rogi.
David

1
@David Czy cornerRadius = 7 działa gdziekolwiek w widoku zgrupowanej tabeli? Co jeśli komórka jest w środku? Nie mam czasu na testowanie tego.
Maciej Swic

2
bo szybki jest mały błąd. Prawidłowa linia to cell.selectedBackgroundView = bgColorView
John Kakon

13
Należy pamiętać, że aby to zadziałało, w Storyboard (lub pliku XIB) musisz wybrać wybrany kolor tła inny niż None. Jest to sprzeczne z niektórymi odpowiedziami, które mówią, że najpierw musisz ustawić opcję Brak, aby działała. W przypadku None nie będzie działać. Doprowadzało mnie do szaleństwa, dopóki się nie domyśliłem. Dzięki.
kakubei

1
Jak sprawiłbyś, żeby to działało, gdy używasz również scenorysu?
Jan

42

Widok tabeli Kolor tła wyboru komórki można ustawić za pomocą Scenorysu w Konstruktorze interfejsów:

Kolor zaznaczenia komórki widoku tabeli Brak


1
Myślę, że nie możemy ustawić niestandardowego koloru z scenorysu. Musisz ustawić to programowo.
pallavi

37

Jeśli masz zgrupowaną tabelę z tylko jedną komórką na sekcję, po prostu dodaj ten dodatkowy wiersz do kodu: bgColorView.layer.cornerRadius = 10;

UIView *bgColorView = [[UIView alloc] init];
[bgColorView setBackgroundColor:[UIColor redColor]];
bgColorView.layer.cornerRadius = 10;
[cell setSelectedBackgroundView:bgColorView];
[bgColorView release]; 

Nie zapomnij zaimportować QuartzCore.


28

Swift 3: dla mnie zadziałało, gdy umieściłeś to w cellForRowAtIndexPath:metodzie

let view = UIView()
view.backgroundColor = UIColor.red
cell.selectedBackgroundView = view

6
Myślę, że lepszym miejscem na umieszczenie tego jest awakeFromNib()metoda (w przypadku niestandardowej komórki).
LembergSun

22

Poniższe działa dla mnie w iOS 8.

Muszę ustawić styl wyboru na UITableViewCellSelectionStyleDefault na, aby działał niestandardowy kolor tła. Jeśli jakikolwiek inny styl, niestandardowy kolor tła zostanie zignorowany. Wygląda na to, że nastąpiła zmiana w zachowaniu, ponieważ poprzednie odpowiedzi muszą zamiast tego ustawić styl na none.

Pełny kod komórki w następujący sposób:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"MyCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // This is how you change the background color
    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor redColor];
    [cell setSelectedBackgroundView:bgColorView];        
    return cell;
}

Ten kod przecieka pamięć. Wszelkie „przydzielanie” lub tworzenie obiektów musi odbywać się w bloku if (komórka == zero) {}. Lub widok zostanie utworzony za każdym razem, gdy komórka zostanie zwolniona przez iOS.
GeneCode

18

Utwórz niestandardową komórkę dla komórki tabeli i w niestandardowej klasie komórek. M umieść poniższy kod, będzie działał dobrze. Musisz umieścić żądany kolorowy obraz w selectionBackgroundUIImage.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    UIImage *selectionBackground = [UIImage imageNamed:@"yellow_bar.png"];
    UIImageView *iview=[[UIImageView alloc] initWithImage:selectionBackground];
    self.selectedBackgroundView=iview;
}

2
Myślę, że może to być bardziej wydajne pod względem pamięci niż ustawienie selectedBackgroundView podczas inicjowania komórki poprzez tworzenie widoku bg tylko po wybraniu jednej komórki.
dotslashlu

11

Rozszerzenie Swift 3.0

extension UITableViewCell {
    var selectionColor: UIColor {
        set {
            let view = UIView()
            view.backgroundColor = newValue
            self.selectedBackgroundView = view
        }
        get {
            return self.selectedBackgroundView?.backgroundColor ?? UIColor.clear
        }
    }
}

cell.selectionColor = UIColor.FormaCar.blue


1
dodaj IBDesignable i IBInspectable
Michał Ziobro

1
@ MichałZiobro po prostu dodaj @IBInspectablevar, jeśli chcesz. @IBDesignablenie jest do tego przydatny.
Nik Kov

9
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIView *view = [[UIView alloc] init];
    [view setBackgroundColor:[UIColor redColor]];
    [cell setSelectedBackgroundView:view];
}

W tej metodzie musimy ustawić wybrany widok tła.


8

Jeśli chcesz dodać niestandardowy podświetlony kolor do komórki (a komórka zawiera przyciski, etykiety, obrazy itp.), Wykonałem następujące kroki:

Na przykład, jeśli chcesz wybrać żółty kolor:

1) Utwórz widok, który pasuje do całej komórki o kryciu 20% (z żółtym kolorem), na przykład wybrany w tle

2) Napisz w kontrolerze komórki:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     self.backgroundselectedView.alpha=1;
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundselectedView.alpha=0;
    [super touchesEnded:touches withEvent:event];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundSelectedImage.alpha=0;
    [super touchesCancelled:touches withEvent:event];
}

8

W Swift 4 możesz także globalnie ustawić kolor tła komórki tabeli (zaczerpnięty stąd ):

let backgroundColorView = UIView()
backgroundColorView.backgroundColor = UIColor.red
UITableViewCell.appearance().selectedBackgroundView = backgroundColorView

6

Jeśli używasz niestandardowego TableViewCell, możesz również zastąpić awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

1
Fajne rozwiązanie! Dzięki
Thomás Calmon,

Mam prosty widok tabeli z nie więcej niż 10 komórkami, na razie działa to świetnie.
code4latte

5

Jeszcze jedna wskazówka na temat sposobu, w jaki Christian pokazuje tło z zaokrąglonym rogiem dla zgrupowanego stołu.

Jeśli użyję cornerRadius = 10komórki, pokazuje zaokrąglone tło zaznaczenia czterech rogów. Nie jest tak samo z domyślnym interfejsem użytkownika widoku tabeli.

Myślę więc o łatwym sposobie rozwiązania tego problemu za pomocą cornerRadius . Jak widać z poniższych kodów, sprawdź lokalizację komórki (górny, dolny, środkowy lub górny spód) i dodaj jeszcze jedną warstwę podrzędną, aby ukryć górny róg lub dolny róg. To pokazuje dokładnie taki sam wygląd z domyślnym tłem wyboru widoku tabeli.

Testowałem ten kod na iPadzie splitterview. Możesz zmienić pozycję ramki patchLayer według potrzeb.

Daj mi znać, jeśli istnieje łatwiejszy sposób na osiągnięcie tego samego rezultatu.

if (tableView.style == UITableViewStyleGrouped) 
{
    if (indexPath.row == 0) 
    {
        cellPosition = CellGroupPositionAtTop;
    }    
    else 
    {
        cellPosition = CellGroupPositionAtMiddle;
    }

    NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];
    if (indexPath.row == numberOfRows - 1) 
    {
        if (cellPosition == CellGroupPositionAtTop) 
        {
            cellPosition = CellGroupPositionAtTopAndBottom;
        } 
        else 
        {
            cellPosition = CellGroupPositionAtBottom;
        }
    }

    if (cellPosition != CellGroupPositionAtMiddle) 
    {
        bgColorView.layer.cornerRadius = 10;
        CALayer *patchLayer;
        if (cellPosition == CellGroupPositionAtTop) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 10, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        } 
        else if (cellPosition == CellGroupPositionAtBottom) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 0, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        }
    }
}

4

Chcę zauważyć, że edytor XIB oferuje następujące standardowe opcje:

Sekcja: niebieski / szary / brak

(prawa kolumna z opcjami, 4. zakładka, pierwsza grupa „Komórka widoku tabeli”, 4. podgrupa, 1. z 3 pozycji brzmi „Wybór”)

Prawdopodobnie to, co chcesz zrobić, można osiągnąć, wybierając odpowiednią opcję standardową.


masz rację. Z tego powodu możesz po prostu zmienić kolor zaznaczenia w „cellForRowAtIndexPath”, dodając: UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ „Cell”]; cell.selectedBackgroundView = [[Przydzielanie UIView] initWithFrame: CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed: (255/255) zielony: (0/255) niebieski: (0/255) alfa: 0,1];
user8675

DZIĘKI! droga
Fattie

3

Jak na niestandardowym kolorze dla wybranej komórki UITableView, świetne rozwiązanie, jak na Macieja Swic za odpowiedź

Aby dodać do tego, deklarujesz odpowiedź Swica w konfiguracji Komórki zwykle pod:

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

Aby uzyskać dodatkowy efekt, zamiast kolorów systemowych, można użyć wartości RGB w celu uzyskania niestandardowego wyglądu kolorów. W moim kodzie tak to osiągnąłem:

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

} 

 static NSString *CellIdentifier = @"YourCustomCellName";
 MakanTableCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

if (cell == nil) {

cell = [[[NSBundle mainBundle]loadNibNamed:@"YourCustomCellClassName" owner:self options:nil]objectAtIndex:0];
                    } 

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:255.0/256.0 green:239.0/256.0 blue:49.0/256.0 alpha:1];
bgColorView.layer.cornerRadius = 7;
bgColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView:bgColorView];


return cell;

}

Daj mi znać, jeśli to również zadziała. Możesz zadzierać z cornerRadiusliczbą efektów w rogach wybranej komórki.


3

Mam nieco inne podejście niż wszystkie inne, które odzwierciedla wybór na dotyk, a nie po wybraniu. Mam podklasę UITableViewCell. Wszystko, co musisz zrobić, to ustawić kolor tła w zdarzeniach dotykowych, co symuluje wybór za pomocą dotyku, a następnie ustawić kolor tła w funkcji setSelected. Ustawienie koloru tła w funkcji selSelected pozwala odznaczyć komórkę. Pamiętaj, aby przekazać zdarzenie dotykowe super, w przeciwnym razie komórka nie zachowa się tak, jakby była wybrana.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.backgroundColor = UIColor(white: 0.0, alpha: 0.1)
    super.touchesBegan(touches, withEvent: event)
}

override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
    self.backgroundColor = UIColor.clearColor()
    super.touchesCancelled(touches, withEvent: event)
}

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

    // Configure the view for the selected state
    self.backgroundColor = selected ? UIColor(white: 0.0, alpha: 0.1) : UIColor.clearColor()
}

3

Aby dodać tło dla wszystkich komórek (używając odpowiedzi Macieja):

for (int section = 0; section < [self.tableView numberOfSections]; section++) {
        for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
            NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
            UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];

            //stuff to do with each cell
            UIView *bgColorView = [[UIView alloc] init];
            bgColorView.backgroundColor = [UIColor redColor];
            [cell setSelectedBackgroundView:bgColorView];
        }
    } 

2

Aby zastąpić UITableViewCell„s setSelectedrównież działa.

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

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

2

dla tych, którzy chcą się pozbyć domyślnie wybranego szarego tła, wstaw ten wiersz kodu do swojej funkcji cellForRowAtIndexPath:

yourCell.selectionStyle = .None

1
dziękuję bardzo, to jest właściwa odpowiedź dla mnie, a nie dla innych.
DeyaEldeen,

Jak ustawić kolor „zielony” zamiast ustawiać brak, niebieski lub szary.
Satyam

2

dla Swift 3.0:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)

    cell.contentView.backgroundColor = UIColor.red
}

Fajnie, ale zadziała tylko wtedy, gdy użytkownik wybierze coś (domyślny kolor wyboru pozostanie na początku)
Konstantin Salavatov

2

Używam podejścia poniżej i działa dobrze dla mnie,

class MyTableViewCell : UITableViewCell {

                var defaultStateColor:UIColor?
                var hitStateColor:UIColor?

                 override func awakeFromNib(){
                     super.awakeFromNib()
                     self.selectionStyle = .None
                 }

// if you are overriding init you should set selectionStyle = .None

                override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let hitColor = hitStateColor {
                        self.contentView.backgroundColor = hitColor
                    }
                }

                override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }

                override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }
            }

2

Swift 4+:

Dodaj następujące wiersze w komórce tabeli

let bgColorView = UIView()
bgColorView.backgroundColor =  .red
self.selectedBackgroundView = bgColorView

Wreszcie powinno być jak poniżej

override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
        let bgColorView = UIView()
        bgColorView.backgroundColor =  .red
        self.selectedBackgroundView = bgColorView

    }

1

Oto ważne części kodu potrzebne do zgrupowanej tabeli. Po wybraniu dowolnej komórki w sekcji pierwszy wiersz zmienia kolor. Bez początkowego ustawienia stylu cellselection na none, następuje denerwujące podwójne przeładowanie, gdy użytkownik kliknie wiersz 0, w którym komórka zmienia się na bgColorView, a następnie zanika i ponownie ładuje bgColorView. Powodzenia i daj mi znać, jeśli istnieje prostszy sposób na zrobienie tego.

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if ([indexPath row] == 0) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIView *bgColorView = [[UIView alloc] init];
        bgColorView.layer.cornerRadius = 7;
        bgColorView.layer.masksToBounds = YES;
        [bgColorView setBackgroundColor:[UIColor colorWithRed:.85 green:0 blue:0 alpha:1]];
        [cell setSelectedBackgroundView:bgColorView];

        UIColor *backColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithWhite:1 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row0";
    }
    else if ([indexPath row] == 1) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row1";
    }
    else if ([indexPath row] == 2) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row2";
    }
    return cell;
}

#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:[indexPath section]];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];

    [tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tvStat cellForRowAtIndexPath:indexPath];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}

#pragma mark Table view Gestures

-(IBAction)singleTapFrom:(UIGestureRecognizer *)tapRecog
{

    CGPoint tapLoc = [tapRecog locationInView:tvStat];
    NSIndexPath *tapPath = [tvStat indexPathForRowAtPoint:tapLoc];

    NSIndexPath *seleRow = [tvStat indexPathForSelectedRow];
    if([seleRow section] != [tapPath section])
        [self tableView:tvStat didDeselectRowAtIndexPath:seleRow];
    else if (seleRow == nil )
        {}
    else if([seleRow section] == [tapPath section] || [seleRow length] != 0)
        return;

    if(!tapPath)
        [self.view endEditing:YES];

    [self tableView:tvStat didSelectRowAtIndexPath:tapPath];
}

1

W przypadku niestandardowej klasy komórki. Po prostu zastąp:

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

    // Configure the view for the selected state

    if (selected) {
        [self setBackgroundColor: CELL_SELECTED_BG_COLOR];
        [self.contentView setBackgroundColor: CELL_SELECTED_BG_COLOR];
    }else{
        [self setBackgroundColor: [UIColor clearColor]];
        [self.contentView setBackgroundColor: [UIColor clearColor]];
    }
}

0

Łatwo jest, gdy styl widoku tabeli jest prosty, ale w stylu grupowym to mały problem, rozwiązuję go przez:

CGFloat cellHeight = [self tableView:tableView heightForRowAtIndexPath:indexPath];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kGroupTableViewCellWidth+2, cellHeight)];
view.backgroundColor = kCommonHighlightedColor;
cell.selectedBackgroundView = view;
[view release];
UIRectCorner cornerFlag = 0;
CGSize radii = CGSizeMake(0, 0);
NSInteger theLastRow = --> (yourDataSourceArray.count - 1);
if (indexPath.row == 0) {
    cornerFlag = UIRectCornerTopLeft | UIRectCornerTopRight;
    radii = CGSizeMake(10, 10);
} else if (indexPath.row == theLastRow) {
    cornerFlag = UIRectCornerBottomLeft | UIRectCornerBottomRight;
    radii = CGSizeMake(10, 10);
}
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:cornerFlag cornerRadii:radii];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = maskPath.CGPath;
view.layer.mask = shapeLayer;

zauważyłem kGroupTableViewCellWidth, definiuję go jako 300, jest to szerokość szerokości komórki widoku tabeli grup w iPhonie


0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

Upewnij się, że użyłeś powyższej linii, aby użyć efektu wyboru


0
override func setSelected(selected: Bool, animated: Bool) {
    // Configure the view for the selected state

    super.setSelected(selected, animated: animated)
    let selView = UIView()

    selView.backgroundColor = UIColor( red: 5/255, green: 159/255, blue:223/255, alpha: 1.0 )
    self.selectedBackgroundView = selView
}

Dodaj wyjaśnienie swojej odpowiedzi, aby była czytelna dla wszystkich przyszłych czytelników
techspider

0

Używam iOS 9.3 i ustawianie koloru za pomocą Storyboard lub ustawienie cell.selectionStylenie działało dla mnie, ale poniższy kod działał:

UIView *customColorView = [[UIView alloc] init];
customColorView.backgroundColor = [UIColor colorWithRed:55 / 255.0 
                                                  green:141 / 255.0 
                                                   blue:211 / 255.0 
                                                  alpha:1.0];
cell.selectedBackgroundView = customColorView;

return cell;

Znalazłem to rozwiązanie tutaj .


0

Spróbuj obserwować kod.

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[cellIdArray objectAtIndex:indexPath.row] forIndexPath:indexPath];

    // Configure the cell...
    cell.backgroundView =
    [[UIImageView alloc] init] ;
    cell.selectedBackgroundView =[[UIImageView alloc] init];

    UIImage *rowBackground;
    UIImage *selectionBackground;


    rowBackground = [UIImage imageNamed:@"cellBackgroundDarkGrey.png"];
    selectionBackground = [UIImage imageNamed:@"selectedMenu.png"];

    ((UIImageView *)cell.backgroundView).image = rowBackground;
    ((UIImageView *)cell.selectedBackgroundView).image = selectionBackground;



    return cell;
}

// Szybka wersja:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell


        cell.selectedBackgroundView = UIImageView()
        cell.backgroundView=UIImageView()

        let selectedBackground : UIImageView = cell.selectedBackgroundView as! UIImageView
        selectedBackground.image = UIImage.init(named:"selected.png");

        let backGround : UIImageView = cell.backgroundView as! UIImageView
        backGround.image = UIImage.init(named:"defaultimage.png");

        return cell


    } 

0

Swift 4.x

Aby zmienić kolor tła zaznaczenia na dowolnyKolor użyj Swift Extension

Utwórz rozszerzenie komórki UITableView jak poniżej

extension UITableViewCell{

    func removeCellSelectionColour(){
        let clearView = UIView()
        clearView.backgroundColor = UIColor.clear
        UITableViewCell.appearance().selectedBackgroundView = clearView
    } 

}

Następnie wywołaj removeCellSelectionColour () z instancją komórki.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.