2014-05-02 26 views
10

eklediğimde veya sildiğimde UITableView bölüm üstbilgisi kayboluyor, 4 bölümlü bir UITableView var. Bu bölümlerin üçü başlık görünümündedir.Satırları

Başlık görünümü, viewForHeaderInSection: temsilcisinde normal hücre olarak ayrıldığım UITableViewCell numaralı bağlantıdır.

Herhangi bir bölümden bir satır ekler veya silersem, diğer tableview başlık hücreleri kaybolur.

Bunun, hücrenin yeniden kullanılmasıyla ilgili bir şey olduğu varsayılsa da, hücrelerin başlangıçta hepsi ekranda görüneceğini varsayıyorum (tüm üç başlık aynı anda ekran üzerinde görünür).

Ekledikten veya silindikten sonra diğer bölümleri yeniden yüklemeyi denedim, ancak bu yardımcı olmuyor.

İşte bazı kod:

- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    switch (section) { 

     case kSectionCardInformation: 
     case kSectionContactInformation: 
     case kSectionTags: { 

      static NSString *CellIdentifier = @"EditContactHeaderCell"; 
      EditContactHeaderCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
      return cell; 
     } 

     default: 
      return nil; 
    } 
} 

Ve burada revelant bölümünde satırı silin nerede:

- (void)deleteTag:(CDTag *)tag { 

    [self.tableView beginUpdates]; 

    NSMutableArray *objects = [self.sections objectAtIndex:kSectionTags]; 
    if ([objects containsObject:tag]) { 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[objects indexOfObject:tag] inSection:kSectionTags]; 
     [objects removeObject:tag]; 

     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationMiddle]; 

     [self.contact deleteTag:tag]; 
    } 

    [self.tableView endUpdates]; 
} 

Herhangi yardıma, büyük takdir.

+1

UITableViewCell öğesinin alt sınıfı olmayan bir görünümü kullanmanın sorunu çözdüğünü buldum. Ama nedenini anlamıyorum. – louissmr

cevap

-1

Yani neden başlığında için tableview hücresini kullanan edilir bilmiyorum, ama benim varsayım olduğunu Sen eğer hücreyi dönmeden önce mola deyimi

- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    switch (section) { 

     case kSectionCardInformation: 
      break; 
     case kSectionContactInformation: 
      break; 
     case kSectionTags: { 

      static NSString *CellIdentifier = @"EditContactHeaderCell"; 
      EditContactHeaderCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
      return cell; 
     } 

     default: 
      return nil; 
    } 
} 

Kontrol nil koşulunu kaçırmış

O zaman nil hücresini oluşturdu.

  static NSString *CellIdentifier = @"EditContactHeaderCell"; 
      EditContactHeaderCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

      return cell ?: createdCellNewly; 

Güncellemeler:

Sonra numberOfSectionsInTableView:(UITableView *)tableView yöntem doğru sayısını döndürür kontrol edin.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
     // returning count is correct? 
    } 

Kontrol ve Tableview en temsilci & veri kaynağı olarak ayarlayın.

+0

Mola ifadelerine ihtiyacım yok - bu üç durum ifadesi, tüm hücreyi oluşturmak için geçerlidir. Aslında, bir satır ekledikten veya sildikten sonra işlev tekrar çağrılmaz (yalnızca başlık ekrandan çıkar ve tekrar görünürse). – theDuncs

+0

güncellenen kodu kontrol edin –

+0

Vijay. Yardımlarınız için teşekkürler, ancak yukarıdakilerin tümü doğru şekilde kaplıdır. – theDuncs

15

UITableViewCell'inizi UIView'e sarın. Ben aynı problem vardı çünkü Yorum ekleniyor

- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

switch (section) { 

    case kSectionCardInformation: 
    case kSectionContactInformation: 
    case kSectionTags: { 

     static NSString *CellIdentifier = @"EditContactHeaderCell"; 
     EditContactHeaderCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     UIView * view = [[[UIView alloc] init] autorelease]; 
     [view addSubview:cell]; 
     //setup the view's frame: fixed, autolayout, ... 
     return view; 
    } 

    default: 
     return nil; 
} 

}

+0

Bu çalışır. Neden bir '' 'UIView''' içinde sarmak gerekiyor? – KingPolygon

+0

Tablo görünümü alt görünümlerini araştırıyor ve bir başlık görünümü bir hücre ise, bir şekilde bir hücre olarak işleniyor. – louissmr

+0

İlginç. Özel bir UIView alt sınıfı ile aynı sorunu yaşıyordum, belki de "memberOf:" yerine "kindOf:" ile bir if ifadesi kullanıyor olabilir – KingPolygon

1

... sorun ben de bir başlık olarak bir UITableViewCell kullanarak yerine bir UITableViewHeaderFooterView kullanılarak olmasıydı.

  1. bir uç dosyası oluşturun ve film şeridinde UITableView içinde yerine orada özel üstbilgi olun:

    sorunu gidermek için.Özel UITableViewHeaderFooterView sınıfına
  2. Bağlantı bunu
  3. Ol viewDidLoad işlevi içinde bu ucu

    viewForHeaderInSection işlevinden sizin yeniden HeaderFooterView Dequeue
    override func viewDidLoad() { 
        self.tableView.rowHeight = UITableViewAutomaticDimension 
    
        self.tableView.register(UINib(nibName: "NibFileName", bundle: nil), forHeaderFooterViewReuseIdentifier: "CustomViewHeaderView") 
    } 
    
  4. :

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
        let cell = tableView.dequeueReusableHeaderFooterView(withIdentifier:"CustomViewHeaderView") as! CustomViewHeaderView 
    
        return cell 
    } 
    

Bu sabit benim kaybolan Başlığım. Umarım başkalarına yardım edebilir.