Soru Tüm tablo görünümünü yeniden yüklemeden UITableView'un bölüm üstbilgi / altbilgi başlığını değiştirme


Tablo görünümünün bölüm üstbilgisini / altbilgisini çağırmadan yeniden yüklemek için herhangi bir yolu var mı   [tableView reloadData];?

Aslında, hücre görünümündeki bölümlerin alt kısmındaki tablo görünümündeki hücrelerin sayısını göstermek istiyorum. Tablo görünümü düzenlenebilir ve satırları siliyorum veya ekledim

– insertRowsAtIndexPaths:withRowAnimation:
– deleteRowsAtIndexPaths:withRowAnimation:

Bu yöntemler, bölüm altbilgisini güncelleştirmez gibi görünüyor. Tuhaf bir şekilde, bu yöntemleri çağırdığımda tablo görünümü veri kaynağı yöntemi

- (NSString *)tableView:(UITableView *)table titleForFooterInSection:(NSInteger)section 

(iki kez!) çağrılır, ancak tablo görünümünü yeni değerlerle güncellemez!

Bu sorunun nasıl giderileceği konusunda herhangi bir fikri olan var mı?


26
2017-12-03 15:21


Menşei




Cevaplar:


Basit bir metin başlığı veya altbilgisi varsa, bunlara doğrudan erişebilirsiniz:

[tableView footerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForFooterInSection:indexPath.section];

başlık için benzer şekilde:

[tableView headerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForHeaderInSection:indexPath.section];

34
2017-07-30 23:53



Ancak, textLabel çerçeveyi doğrudan yeni metne sığacak şekilde değiştirmez. Aramak zorunda mıyım sizeToFit altbilgi / üstbilgi görünümünde? - Blip
Tablo görünümünün düzenini yeniden hesaplamasını sağlamak için beginUpdates / endUpdates öğesini çağırmanız gerekecek - Vadim Yelagin
Altın! tableView.headerViewForSection (indexPath.section) ?. textLabel.text = tableView (tableView, titleForHeaderInSection: indexPath.section) - DogCoffee
Bunun işletim sisteminin stiline uymadığını unutmayın. Gruplandırılmış bölüm üstbilgilerine uygulanan tüm büyük harfli yazı tipi gibi. - Ben Guild


Bu çalışmalı:

    UIView.setAnimationsEnabled(false)
    tableView.beginUpdates()

    if let containerView = tableView.footerViewForSection(0) {
        containerView.textLabel!.text = "New footer text!"

        containerView.sizeToFit()
    }

    tableView.endUpdates()
    UIView.setAnimationsEnabled(true)

15
2017-11-29 22:00



İOS 9, Swift 2.2'de gayet güzel çalışıyor. Ve kesinlikle önlenmelidir çerçeve dikdörtgenler harcoding, daha çok daha temiz. - maganap


Bunu dolaylı bir şekilde yapmayı başardım: Bir UILabel oluşturdum ve bölüm üstbilgi / altbilgi olarak ayarladım.

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    // update sectionFooterView.text    
    return sectionFooterView;
}

- (void)viewDidLoad {
    // create sectionFooterView in Interface Builder, change the frame here
    // use Font-size:15 , BG-Color: clearColor , text-Color: RGB=(97,105,118) 
    // and Text-alignment:Center to look like table view's original footer
    sectionFooterView.frame = CGRectMake(0, 10, 320, 12);
}

Özel altbilgi görünümünü ayarlamadan bunu yapmanın bir yolu var mı?


6
2017-12-03 16:34



Bunu yapmanın yolu bu. Ne zaman ararsan [sectionFooterView setText: @"Some text"] Ekranda güncellenir. - Tony the Tech


İşte bunu yapmanın başka bir yolu:

UITableViewHeaderFooterView *headerView=[self.tableView headerViewForSection:1];
CATransition *animation = [CATransition animation];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.type = kCATransitionFade;
animation.duration = 0.35;
[headerView.textLabel.layer addAnimation:animation forKey:@"kCATransitionFade"];
headerView.textLabel.text=[self tableView:self.tableView titleForHeaderInSection:1];
[headerView.textLabel sizeToFit];

3
2017-10-27 18:38





Swift 3.0'da bunu nasıl yapıyorsunuz?

tableView.beginUpdates()
tableView.headerView(forSection: indexPath.section)?.textLabel?.text = "Some text"
tableView.endUpdates()

3
2018-06-30 12:10





UITableView belgelerini veya daha spesifik olarak kontrol edin -reloadSections:withRowAnimation:


2
2017-08-31 02:06



Bu çalışır, ancak sadece bölüm üstbilgisini / altbilgisini güncellemediği için değil, aynı zamanda tüm hücreleri güncelleyeceği için en verimli değildir. Ali'nin cevabı gitmenin yolu gibi görünüyor. - Adrian Schönig
Apple'ın altbilgi veya üstbilgiyi değiştirirseniz içeriğin de değişeceğini umuyorum. Ama evet, sadece yarı-statik görüntülenen metinden çok daha fazlasını özelleştirmek istiyorsanız, viewForFooter / Header'ı kullanmak daha kolay olabilir. Sadece varsayılan bölüm üstbilgileri ve altbilgileri sizin için bir çok biçimlendirme yaptığınızdan ve bunları önemsiz bir şey için geçersiz kılmanın en iyi seçenek olmadığını da unutmayın. - Tim


Bu şekilde de yapabilirsiniz

override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
    switch section {
        case 0:
            return "Some string"
        default:
            return ""
    }
}

0
2018-04-24 13:03