2014-12-30 17 views
7

hücre genişliğine göre değiştirmek için tercih edilen yaklaşım Otomatik düzeninden yararlanan dinamik bir özel UITableViewCell ürünüme sahibim.UiteableViewCell içeriğini

Hücrenin genişliğine bağlı olarak etiketin metin içeriğini değiştiriyorum.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    cell.someLabel.text = CGRectGetWidth(cell.bounds) < 321 ? @"Concise" : @"Much longer blurb"; 

    return cell; 
} 

reloadData etiket güncelleştirmek için yönlendirme geçişi sırasında adlandırılır.

Bu işe yaramakla birlikte, bunun tabloyu yeniden yükleme ek yükü içermeyen, bununla başa çıkmanın daha iyi bir yolu olduğunu tahmin ediyorum.

(kısıtlamalar hiçbiri değişmez gerekiyor. Etiket aynı yerde olmakla sadece bunun için daha fazla yer var farklı içerik. Gösterir)

  • Ben UILabel alt sınıf ve metni değiştirmek Should -didMoveToSuperview?

  • Metni -layoutSubViews olarak değiştirmek mümkün müdür? (Metin değiştirildiği için bu başka düzen geçmek neden olmaz mı?) Herhangi cevapları için

Teşekkür!

+0

Yapmam gereken ilk şey tablo görünümü yeniden "havai" olduğuna inanıyoruz neden tekrar düşünmek olduğunu düşünüyorum. Oldukça verimlidir, çünkü sadece görünen tablo hücresi verileri yeni getirilmiştir - ve veri modeliniz tamamen verimli olmalı ya da yanlış yapıyor olmalısınız. – matt

+0

Sadece overkill gibi görünüyor Matt. Otomatik döndürme işlemi otomatik olarak gerçekleşiyor ve sanırım halihazırda gerçekleşen düzen geçişi içinde ele alınabiliyor. Hücrenin veya etiketin nasıl işleyeceğini bilmek için otomatik düzen hakkında yeterli bilgi sahibi değilim. –

+0

Ancak bahsetmediğim konu, yeniden yükleme olmadan göremeyeceğiniz yeniden yüklemenin ince titremesidir. Tabloyu yeniden yüklemek zorunda kalmazsam daha hoş görünürdü ve sadece otomatik olarak döndü ve kendini farklı şekilde değiştirdi. Mümkün? –

cevap

4

Bu mantığı basitçe layoutSubviews numarasına eklemeniz gerekir. Otomatik mizanpaj motoru her şeyinde her zaman denir. "TableView yeniden yükünü içermez"

-(void)layoutSubviews { 
    self.someLabel.text = CGRectGetWidth(self.bounds) < 321 ? @"Concise" : @"Much longer blurb"; 
    [super layoutSubviews]; 
} 
+0

Kullanıyorum: -viewWillTransitionToSize: withTransitionCoordinator: 'Hepsini otomatik düzen içinde ele almayı denemek isterim (görünür hücreler halihazırda tablonun yeniden yüklenmesi gerekmeden geçişe tepki gösterdiğinden). Sadece metni gerçekten nerede değiştireceğimi bulmalıyım. –

+0

Görsel hücreler zaten tepki veriyorsa, bu reaksiyonun meydana geldiği yerde neden metni değiştirmiyorsunuz? – Rick

+0

Bu benim düşüncem, ama hangi yöntemi kullanacağımı bilmiyorum ve bu bile geçersiz kılmak için doğru yöntemse, -layoutSubviews'la asla uğraşmadım. Birkaç gün içinde bilinmeyene dalmak ve kimsenin bu cevabı yoksa, metnin değişiminin nerede gerçekleşeceğini keşfetmeye çalışacağız. –