Bir UITableViewCell'in mavi vurgu rengi nasıl değiştirilir?


131

A'nın mavi vurgu / seçim rengini nasıl değiştireceğimi merak ediyorum UITableViewCell, herhangi bir fikriniz var mı?

Yanıtlar:


213

Vurgu rengini birkaç şekilde değiştirebilirsiniz.

  1. Hücrenizin selectionStyle özelliğini değiştirin. Olarak değiştirirseniz UITableViewCellSelectionStyleGraygri olur.

  2. selectedBackgroundViewÖzelliği değiştirin . Aslında mavi gradyanı yaratan bir görünümdür. Bir görünüm oluşturabilir ve istediğinizi çizebilir ve görünümü tablo görünümü hücrelerinizin arka planı olarak kullanabilirsiniz.


8
harika, burada iyi bir açıklama ve örnek bulundu: cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Thomas Joos

1
IB'de UITableViewCell "Seçimini" "Yok" olarak ayarlayamayacağınızı fark ettim - çünkü selectedBackgroundViewo zaman asla görünmeyecektir. Yalnızca "Seçim" Varsayılan olarak ayarlandıktan sonra, selectedBackgroundViewgösterme. İOS 6 ve 7'de test edildi
Jonny

12
Harika not için teşekkürler! Bu artık işi çok basit hale getiriyor: yeni bir görünüm oluşturuyorsunuz (çerçeveyi belirlemenize bile gerek yok: cell.selectedBackgroundView = [UIView new];ve istediğiniz rengi ayarlıyorsunuz:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Dannie P

bu sayfanın altına bakın, daha yeni yaklaşımlar var
Climbatize

144

Zonble zaten mükemmel bir cevap verdi. UIViewTablo görünümü hücresine seçilen arka plan görünümü olarak sunulacak bir kısa kod parçacığı eklemenin yararlı olabileceğini düşündüm .

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    UIView *selectionColor = [[UIView alloc] init];
    selectionColor.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1];
    cell.selectedBackgroundView = selectionColor;
  • hücre benim UITableViewCell
  • Bir UIView oluşturdum ve RGB renklerini (açık gri) kullanarak arka plan rengini ayarladım
  • Daha sonra hücreyi selectedBackgroundView, UIViewseçtiğim arka plan rengiyle oluşturduğum hücreye ayarlıyorum

Bu benim için iyi çalıştı. Zonble bahşiş için teşekkürler.


2
Bu, bölümlerle tablo görünümleri kullanıldığında çok iyi çalışmaz. Seçildiğinde, hücre kenarlıkları kaybeder ve ilk veya son hücre olduğunda yuvarlanmaz.
Kirk Woll

7
@kirk, gruplanmış demek istiyorsun :)
Tieme

@Tieme, hayır, bölümleri kastediyorum : "Bir tablo görünümü, her biri kendi satırına sahip sıfır veya daha fazla bölümden oluşur."
Kirk Woll

Bunu 'cellForRowAtIndexPath' içine yerleştirmelisiniz. Tek bölümle benim için iyi çalışıyor. Birden fazla bölümle denemedim.
Vincent

Oyuna biraz geç kaldım, ancak birden çok bölümlü (gruplanmamış) bir
tablo görünümünde

30

UITableViewCell üç varsayılan seçim stiline sahiptir: -

  1. Mavi
  2. Gri
  3. Yok

Uygulama aşağıdaki gibidir: -

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}

7
bu üç varsayılan stil yerine, selectedBackgroundView özelliğini kullanarak beklenen stilimiz için de özelleştirebiliriz.
Sunil Targe

Benim için çalıştı ... Çok teşekkürler.
Mujeeb Farooqi

19

Swift'de bunu kullanın cellForRowAtIndexPath

let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView

Seçim renginizin her birinde aynı olmasını istiyorsanız UITableViewCell, bunu kullanın AppDelegate.

let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView

18

Uygulama çapında değiştirmek istiyorsanız, mantığı Uygulama Temsilcinize ekleyebilirsiniz.

class AppDelegate: UIResponder, UIApplicationDelegate {

    //... truncated

   func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

        // set up your background color view
        let colorView = UIView()
        colorView.backgroundColor = UIColor.yellowColor()

        // use UITableViewCell.appearance() to configure 
        // the default appearance of all UITableViewCells in your app
        UITableViewCell.appearance().selectedBackgroundView = colorView

        return true
    }

    //... truncated
}

Mükemmel. Bu varsayılan hücrenin metin rengini genel olarak seçime nasıl ayarlayacağınıza dair bir fikriniz var mı?
BananaAcid

1
bu çalışır, ancak yeni görünüm denetleyicisine basıldığında seçim doğrudan temizlenir.
bobmoff

UITableViewCell'de genel değişiklikler yapmanın güzel yolu
Shashi3456643

12

tamlık için: Kendi alt sınıfınızı oluşturduysanız UITableViewCell, - (void)setSelected:(BOOL)selected animated:(BOOL)animatedyöntemi uygulayabilir ve içerik görünümüne eklediğiniz bazı görünümlerin arka plan rengini ayarlayabilirsiniz. (durum buysa) veya contentView'in kendisi (kendi görünümlerinizden biri tarafından kapsanmıyorsa).

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if(selected) {
        self.contentView.backgroundColor = UIColor.blueColor;
    } else {
        self.contentView.backgroundColor = UIColor.whiteColor;
    }
}

(kullanmadınız mı? DIV kaynak kodlarının küçük genişliğine sığdırmak için :)

Bu yaklaşımın selectedBackgroundView kullanmaya göre iki avantajı vardır, daha az bellek kullanır ve biraz daha az CPU kullanır, u yüzlerce hücreyi görüntülemedikçe farkına bile varmazsınız.


Bu yalnızca selectedBackgroundView , Yöntemin en başında addself. selectedBackgroundView = [UIView new];
enadun

@enadun Bu yöntemler benim için iOS 12'de çalışır, selectedBackgroundViewözelliğin ayarlanması gerekmez .
Nate

11

UITableViewCellSelectionStyleDefaultÖzel arka plan renginin çalışması için seçim stilini olarak ayarlamam gerekiyor. Başka bir stil varsa, özel arka plan rengi göz ardı edilecektir. İOS 8'de test edildi.

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

6

Dayanarak @ kullanıcının cevap , sadece uygulama kodunuza bu uzantı hiçbir yerinde ekleyebilir ve uygulamanızın her hücreler için film şeridi editörü doğrudan seçim renk var:

@IBDesignable extension UITableViewCell {
    @IBInspectable var selectedColor: UIColor? {
        set {
            if let color = newValue {
                selectedBackgroundView = UIView()
                selectedBackgroundView!.backgroundColor = color
            } else {
                selectedBackgroundView = nil
            }
        }
        get {
            return selectedBackgroundView?.backgroundColor
        }
    }
}

Film şeridinde UITableViewCell seçim rengi


5
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
  @IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
    didSet {
      selectedBackgroundView = UIView()
      selectedBackgroundView?.backgroundColor = selectedColor
    }
  }
}

Film şeridinizde, UITableViewCell'inizin sınıfını, Nitelikler denetçisinde UIDesignableTableViewCell olarak ayarlayın, hücrenizin seçili rengini herhangi bir renge değiştirebilirsiniz.

Bunu tüm hücreleriniz için kullanabilirsiniz. Nitelikler denetçiniz böyle görünecek.

Nitelikler denetçiniz böyle görünecek


Çok yaratıcı! harika!
Kaushil Ruparelia

daha da basitleştirebilirsiniz,
cevabıma

Etiketleri ayarlamak için özel bir hücre kullanıyorum, bu yüzden bu iyi çalışıyor, teşekkürler! Swift 5 için değişiklik: Şimdi UIColor.cleardeğil UIColor.clearColor(). Bunun Swift'de de bir değişiklik olup olmadığından emin değilim ama aynı zamanda onsuz da çalışıyor @IBDesignable.
Neph

5

Hızlı 3.0 / 4.0

Kendi özel hücrenizi oluşturduysanız, awakeFromNib()tüm hücreler için seçim rengini değiştirebilirsiniz :

 override func awakeFromNib() {
    super.awakeFromNib()

    let colorView = UIView()
    colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)

    self.selectedBackgroundView = colorView


}

0

1- Hücrenizin içerik görünümüne bir görünüm ekleyin.
2- Hücrenize sağ tıklayın.
3- Eklenen görünümü "selectedBackgroundView" yapın görüntü açıklamasını buraya girin

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.