UITableView Hücre seçili Renk?


319

Bir gelenek yarattım UITableViewCell. Tablo görünümü, verilerin iyi olduğunu gösteriyor. Ne sıkışmış olduğum zaman kullanıcı tableview hücresine dokunduğunda, sonra hücre seçimi vurgulamak için varsayılan [mavi renk] değerleri dışında hücrenin arka plan rengini göstermek istiyorum. Bu kodu kullanıyorum ama hiçbir şey olmuyor:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

Yanıtlar:


365

Ben doğru yolda olduğunu düşünüyorum, ama sınıf tanımına göre selectedBackgroundView:

Varsayılan, düz stil tablolarındaki hücreler için nil (UITableViewStylePlain) ve UITableViewStyleGrouped bölüm grubu tabloları için nil değildir.

Bu nedenle, düz stil bir tablo kullanıyorsanız, UIViewistediğiniz arka plan rengine sahip yeni bir tane ayırmanız ve sonra da atamanız gerekir selectedBackgroundView.

Alternatif olarak şunları kullanabilirsiniz:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

İstediğiniz tek şey hücre seçildiğinde gri bir arka plansa. Bu yardımcı olur umarım.


1
Görünümle ilgili öğeleri görünüme bırakmayı tercih ederseniz bu özellik film şeridinde de ayarlanabilir.
IIll III

1
Swift 3 sürümü: cell.selectionStyle = .gray // .none, .blue veya .default da kullanabilirsiniz
Sébastien REMY

6
Bu cevap oldukça eski ... Yeni iOS sürümlerinde bir şey değişti mi? Düz stil tablo var ve benim selectedBackgroundView nil değil. İlginçtir ki bu görünümde backgroundColor değişen herhangi bir etkisi yoktur, bunun yerine çalışmasını sağlamak için benim istenen backgroundColor ile yeni bir UIView değiştirmek zorunda.
ndreisg

Beni tamamen delirmekten kurtardın. Çok teşekkürler!
mrwheet

656

Özel hücrelere gerek yok. Yalnızca hücrenin seçilen rengini değiştirmek istiyorsanız, bunu yapabilirsiniz:

Objective-C:

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

Swift:

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

47
Bu işe yarar, ancak gruplandırılmış bir UITableView'da yuvarlatılmış köşeler kaybolur.
David

1
@David cornerRadius = 7 gruplandırılmış tablo görünümünde herhangi bir yerde çalışıyor mu? Hücre ortadaysa ne olur? Bunu test etmek için zamanın yok.
Maciej Swic

2
çünkü hızlı küçük bir hatadır. Doğru satır cell.selectedBackgroundView = bgColorView
John

13
Bunun çalışması için, Öykü Tablosu'nda (veya XIB dosyasında) Hiçbiri dışında bir Seçilen Arka Plan rengi seçmeniz gerektiğini unutmayın. Bu, çalışması için önce Yok olarak ayarlamanız gerektiğini söyleyen bazı yanıtların tersidir. Hiçbiri ile çalışmaz. Ben anlayana kadar beni deli ediyordu. Teşekkürler.
kakubei

1
Film şeridi de kullanırken bu işi nasıl yaparsınız?
John

42

Tablo Görünümü Hücre seçimi arka plan rengi, Arayüz Oluşturucu'daki Öykü Paketi aracılığıyla ayarlanabilir:

tablo görünümü hücre seçim rengi Yok


1
Sanırım film şeridinden özel renk ayarlayamıyoruz. Programlı olarak ayarlamanız gerekir.
pallavi

37

Bölüm başına yalnızca bir hücre içeren gruplandırılmış bir tablonuz varsa, koda bu ekstra satırı eklemeniz yeterlidir: bgColorView.layer.cornerRadius = 10;

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

QuartzCore'u içe aktarmayı unutmayın.


28

Swift 3: Benim için cellForRowAtIndexPath:metoda koyduğunuzda işe yaradı

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

6
Bunu koymak için daha iyi bir yer awakeFromNib()(özel hücre durumunda) yöntem olduğunu düşünüyorum .
LembergSun

22

İOS 8'de aşağıdakiler benim için çalışıyor.

UITableViewCellSelectionStyleDefaultÖzel arka plan renginin çalışması için seçim stilini ayarlamam gerekiyor. Başka bir stil varsa, özel arka plan rengi yok sayılır. Önceki yanıtların stili hiçbiri olarak ayarlamaması gerektiğinden davranışlarda bir değişiklik var gibi görünüyor.

Hücrenin tam kodu aşağıdaki gibidir:

- (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;
}

Bu kod bellek sızdırıyor. Herhangi bir "ayırma" veya nesne oluşturma, if (cell == nil) {} bloğunda olmalıdır. Ya da hücre, iOS tarafından her yayınlandığında oluşturulur.
GeneCode

18

Tablo hücreniz ve özel hücre sınıfınız için özel bir hücre oluşturun. M aşağıdaki kodu koyun, iyi çalışır. İstediğiniz renkli görüntüyü selectionBackgroundUIImage'a yerleştirmeniz gerekir .

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

2
Bu sadece bir hücre seçildiğinde bg görünümü oluşturarak hücre başlatılırken bir selectBackgroundView ayarlamak daha bellek verimli olabilir düşünüyorum.
dotslashlu

11

Swift 3.0 uzantısı

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
IBDesignable'ı ve IBInspectable'ı ekleyin
Michał Ziobro

1
@ MichałZiobro isterseniz sadece @IBInspectablevar ekleyin . @IBDesignablebunun için yararlı değildir.
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];
}

Bu yöntemde seçilen arka plan görünümünü ayarlamamız gerekiyor.


8

Hücrenize özel vurgulanmış bir renk eklemek istiyorsanız (ve hücreniz düğmeler, etiketler, resimler vb. İçeriyorsa) Sonraki adımları izledim:

Örneğin, seçili bir sarı renk istiyorsanız:

1) Örneğin, backgroundselectedView olarak adlandırılan% 20 opaklıkla (sarı renkle) tüm hücreye uyan bir görünüm oluşturun

2) Hücre denetleyicisine şunu yazın:

- (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

Swift 4'te, tablo hücrenizin arka plan rengini global olarak da ayarlayabilirsiniz ( buradan alınır ):

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

6

Özel bir TableViewCell kullanıyorsanız, şunları da geçersiz kılabilirsiniz awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

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

1
Güzel çözüm! Teşekkürler
Thomás Calmon

10'dan fazla hücre olmayan basit bir tablo görüntüsü alıyorum, bu şimdiye kadar harika çalışıyor.
code4latte

5

Christian'ın gruplandırılmış masa için yuvarlak köşe arka planını gösterme yoluna bir ipucu daha.

cornerRadius = 10Hücre için kullanırsam , dört köşenin yuvarlak seçim arka planını gösterir. Tablo görünümünün varsayılan kullanıcı arayüzü ile aynı değildir.

Bu yüzden, cornerRadius ile çözmenin kolay yolunu düşünüyorum . Aşağıdaki kodlardan da görebileceğiniz gibi, hücrenin konumunu (üst, alt, orta veya üst alt) kontrol edin ve üst köşeyi veya alt köşeyi gizlemek için bir alt katman daha ekleyin. Bu, varsayılan tablo görünümünün seçim arka planı ile tamamen aynı görünümü gösterir.

Bu kodu iPad ile test ettim splitterview. PatchLayer'ın çerçeve konumunu istediğiniz gibi değiştirebilirsiniz.

Aynı sonucu elde etmenin daha kolay bir yolu olup olmadığını lütfen bize bildirin.

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

XIB editörünün size aşağıdaki standart seçenekleri sunduğunu belirtmek istiyorum:

Bölüm: mavi / gri / hiçbiri

(sağ sütunlu seçenekler, 4. sekme, ilk grup "Tablo Görünümü Hücresi", 4. alt grup, 3 öğeden 1'i "Seçim" yazar)

Muhtemelen ne yapmak istediğiniz doğru standart seçeneği seçerek elde edilebilir.


haklısın. Bu nedenle, bunu ekleyerek "cellForRowAtIndexPath" içindeki seçim rengini basitçe değiştirebilirsiniz: UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ "Cell"]; cell.selectedBackgroundView = [[UIView ayırma] initWithFrame: CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed: (255/255) yeşil: (0/255) mavi: (0/255) alfa: 0.1];
user8675

TEŞEKKÜRLER! gitmek için yol
Fattie

3

Seçilen bir hücre için özel renge UITableViewgöre, Maciej Swic'in cevabına göre harika bir çözüm

Sadece buna eklemek için, Swic'in cevabını Hücre konfigürasyonunda genellikle altında bildirirsiniz :

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

Ek bir efekt için, sistem renkleri yerine, özel bir renk görünümü için RGB değerlerini kullanabilirsiniz. Kodumda ben bunu nasıl başardı:

- (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;

}

Bunun sizin için de işe yarayıp yaramadığını bana bildirin. Sen ile karışıklık yapabilirsiniz cornerRadiusseçilen hücrenin köşelerinde etkileri için numara.


3

Seçimi seçtikten sonra dokunma üzerine yansıtan herkesten biraz farklı bir yaklaşımım var. Bir alt sınıf UITableViewCell var. Tek yapmanız gereken dokunma olaylarında arka plan rengini ayarlamak, dokunulduğunda seçimi simüle etmek ve sonra setSelected işlevinde arka plan rengini ayarlamaktır. SelSelected işlevinde arka plan renginin ayarlanması hücrenin seçimini kaldırır. Touch olayını super'e geçirdiğinizden emin olun, aksi takdirde hücre seçili gibi davranmaz.

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

Tüm hücreler için arka plan eklemek için (Maciej'in cevabını kullanarak):

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

Geçersiz kılma için UITableViewCell's setSelectedda çalışır.

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

varsayılan olarak seçilen gri arka plandan kurtulmak isteyenler için bu kod satırını cellForRowAtIndexPath işlevine yerleştirin:

yourCell.selectionStyle = .None

1
çok teşekkürler, bu benim için doğru cevap diğerleri değil.
DeyaEldeen

Hiçbiri veya mavi veya gri yerine "yeşil" gibi bir renk nasıl ayarlanır.
Satyam

2

Swift 3.0 için:

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

    cell.contentView.backgroundColor = UIColor.red
}

Güzel, ama sadece kullanıcı bir şey seçtikten sonra çalışacaktır (varsayılan seçim rengi başlangıçta kalacaktır)
Konstantin Salavatov

2

Aşağıdaki yaklaşımı kullanıyorum ve benim için iyi çalışıyor,

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+:

Tablo hücrenize aşağıdaki satırları ekleyin

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

Sonunda aşağıdaki gibi olmalı

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

Gruplanmış bir tablo için gereken kodun önemli kısımları aşağıda verilmiştir. Bir bölümdeki hücrelerden herhangi biri seçildiğinde, ilk satırın rengi değişir. Başlangıçta cellselectionstyle öğesi none olarak ayarlanmadan, kullanıcı satır0'ı tıklattığında, hücre bgColorView olarak değiştiğinde kaybolur ve tekrar bgColorView yeniden yüklenir. İyi Şanslar ve bunu yapmanın daha basit bir yolu olup olmadığını bana bildirin.

- (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

Özel hücre sınıfı durumunda. Sadece geçersiz kıl:

- (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

Tablo görünümü stili düz olduğunda kolaydır, ancak grup stilinde biraz sorun var, bunu şu şekilde çözüyorum:

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;

kGroupTableViewCellWidth kaydetti, bunu 300 olarak tanımladım, iPhone'daki grup tablosu görünümü hücre genişliğinin genişliği


0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

Seçim efektini kullanmak için yukarıdaki satırı kullandığınızdan emin olun


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
}

Gelecekteki tüm okuyucular için okunabilir hale getirmek için lütfen cevabınıza biraz açıklama ekleyin
techspider

0

İOS 9.3 kullanıyorum ve Storyboard üzerinden ayarlıyorum veya ayar cell.selectionStylebenim için çalışmadı, ancak aşağıdaki kod çalıştı:

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;

Bu çözümü burada buldum .


0

Aşağıdaki kodu deneyin.

- (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;
}

// Hızlı Sürüm:

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

Seçim arka plan rengini herhangi bir renkle değiştirmek için Swift Uzantısını kullanın

Aşağıdaki gibi UITableView Cell uzantısı oluşturun

extension UITableViewCell{

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

}

Sonra hücre örneği ile removeCellSelectionColour () öğesini çağırın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.