SORU
7 Mart 2011, PAZARTESİ


UİView backgroundColor UİTableViewCell seçildiğinde kaybolur

Basit bir tableViewCell ınterface builder inşa var. Bir görüntü içeren bir UİView içerir. Hücreyi seçtiğinizde, varsayılan seçimi mavi arka plan gösterilir, ama benim UİView bu backgroundColor gitti.

Benim UİTableViewCell uygulama dosyaya özel bir şey yapmaz. Sadece init & öz ve setSelected telefon süper tek yaptığım verir.

Nasıl tableView seçildiğinde göstermek için UİView benim backgroundColor alabilirim?

CEVAP
17 ŞUBAT 2012, Cuma


Sorun burada [süper] uygulanması

- (void) setSelected:(BOOL) selected animated:(BOOL) animated;

temsil etmek için UİTableViewCell tüm arka plan renklerini(0,0,0,0) ayarlar. Neden? Belki de bize yapmak için ter?

Tüm görünümler kaybolur eğer görüş katman kenarlık özelliklerini değiştirmek için bu korunur gerçeği kanıtladığı gibi değil

Burada bir hücre dokunmadan kaynaklanan işlev çağrıları dizisi

  1. setHighlighted
  2. touchesEnded
  3. layoutSubviews
  4. willSelectRowAtİndexPath (temsilci yan)
  5. (!!! setSelected tüm görünüm arka plan renkleri yok dedi yerdir)
  6. didSelectRowAtİndexPath (temsilci yan)
  7. setSelected (tekrar) (İlginç bir şekilde bu çağrı, arka plan renkleri temizlenmez. Ne tuhaflığı süper yöntem içinde oluyor?)
  8. layoutSubviews (tekrar)

Seçenekleriniz vardır

  1. Geçersiz kılar- (void) setSelected:(BOOL) animasyon seçili:(BOOL) animasyon;haber vermeden[süper setSelected:seçilen animasyon:animasyon]. Bu size en iyi teknik olarak doğru bir uygulama çünkü) kodu sarılmış içinde UİTableViewCell sınıfı ve b) çünkü sadece çağrıldığında gerekli (aslında iki kez gerektiğinde, ama belki vardır bir yolu). Aşağı tarafı tekrar uygulamak zorunda kalırsınız setSelected tüm gerekli fonksiyonları gereksiz renk takas işlevleri farklı olarak). Şimdi düzgün setSelected henüz geçersiz kılmak için nasıl diye sorma. Sanırım artık senin için benim kadar iyi (sabırlı olun, durumu anlayınca bu cevap düzenleyeceğim).
  2. Yeniden iddia renklerde arka plandidSelectRowAtİndexPath. Bu kod örneği dışında örnek olması gereken koyar, çünkü o kadar büyük değildir. Aksine gerektiğinde aradı, bu iyi tarafı
  3. Yeniden iddia renklerde arka planlayoutSubviews. Bu layoutSubviews MİLYON kere denir, çünkü büyük değil! Her zaman tablosunu yeniler, kayarak, her zaman, büyükanne perma... ciddiye alır gibi her zaman, bir milyon kere aradı. Gereksiz arka plan re-iddialar ve ekstra işlem yükü bir sürü bir sürü var demektir. Parlak tarafında güzel UİTableViewCell alt, içindeki şifre koyar.

Ne yazık ki yeniden ileri sürerek arka plan renkleri setHighlighted hiçbir şey yapmaz çünkü setHighlighted denir önce tüm arka plan renkleri ayarlamak için [g:0 b:0 g:0:0] tarafından ilk arama için setSelected.

//TODO: setSelected geçersiz kılmak için ne kadar büyük bir açıklama (bizden ayrılmayın)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • iMasterful

    iMasterful

    11 EYLÜL 2009