SORU
17 HAZİRAN 2010, PERŞEMBE


/Sözleşme uitableviewcell dinamik olarak genişletmek için Nasıl tablo hücre akordeon?

Bir akordeon, kullanıcı hücreyi seçtiğinde, ayrıntılı bilgi görüntülemek sıralı kazma app nasıl çalıştığını benzer görüntülemek için genişler bu tür uitableviewcell oluşturmak çalışıyorum. Ben başlangıçta hücrenin yerini ve genel etkisi iş için iyi bakmıyor gördüğünüz gibi ancak animasyon biraz dalgalı görünüyor cellForRowAtİndex bir customcell ile geçerli tablecell değiştirmeyi denedim.

Eğer kazma uygulaması ve bunu yapan başkaları bakarsanız geçerli hücrenin değiştirilmesi ama bunun yerine belki de hücreye bir küme ekleme onlar öyle gibi görünüyor? Orijinal hücrenin ancak bakmıyor hiç animasyon gibi görünüyor ve sadece yeni bir görünüm tabloya akordeon.

Herkes benzer bir efekt gerçekleştirmek için nasıl herhangi bir fikir var mı?

Güncelleme: Bazı gelişmeler aşağıda neha yöntemi kullanarak yaptım ve hücreye doğru yol hareketlendirme ise tablonun diğer hücreleri ile tozu dumana katıyor. Yaptığım şeyi aslında ben daha sonra tabloya hücre eklemek contentview hangi görünüm çizen bir UİView örneği içeren özel bir sınıf ile alt UİTableViewCell.

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

if (selected) { 
    [self expandCell];
}
}

-(void)expandCell { 
    self.contentView.frame = CGRectMake(0.0, 0.0, self.contentView.bounds.size.width, 110);
}

Burada temsilci yöntemleri kullanmakta olduğum tüm tablo:

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

if (isSearching && indexPath.row == selectedIndex) {

    static NSString *CellIdentifier = @"SearchCell";
    CustomTableCell *cell = (CustomTableCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[CustomTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    [cell setCustomTitle:[timeZoneNames objectAtIndex:indexPath.row] detail:[timeZoneNames objectAtIndex:indexPath.row]];

    UILabel *theText = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 10.0, cell.contentView.bounds.size.width -20, 22.0)];
    theText.text = @"Title Text";
    [cell.contentView addSubview:theText];


    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10.0, 10   46.0, cell.contentView.bounds.size.width - 20, 40.0)];
    textField.borderStyle = UITextBorderStyleLine;
    [cell.contentView addSubview:textField];        

    UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 88.0, cell.contentView.bounds.size.width - 20, 22.0)];
    testLabel.text = [NSString stringWithFormat:@"Some text here"];
    [cell.contentView addSubview:testLabel];

    [theText release];
    [textField release];
    [testLabel release];

    return cell;        
} else {

    static NSString *CellIdentifier = @"Cell";
    CustomTableCell *cell = (CustomTableCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[CustomTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    [cell setCustomTitle:[timeZoneNames objectAtIndex:indexPath.row] detail:[timeZoneNames objectAtIndex:indexPath.row]];
    return cell; 
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

[tableView deselectRowAtIndexPath:indexPath animated:NO];   

selectedIndex = indexPath.row;
isSearching = YES;


[tableView beginUpdates];
[tableView endUpdates];

}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {        
if (isSearching && indexPath.row == selectedIndex) {
    return 110;
}
return rowHeight;           
} 

Hücre genişlediğini görünüyor ama aslında etiket ve belirsiz değil, vizyonda çok yenilenirken değil. Ancak sinemada ve hücre ben kaydırma ne zaman ortaya çıksalar.

Herhangi bir fikir?

CEVAP
19 HAZİRAN 2010, CUMARTESİ


Yapmak için Apple yolu oldukça basittir.

İlk olarak, seçilen indexPath satırı kaydetmek gerekir:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   self.selectedRowIndex = [indexPath retain];
   [tableView beginUpdates];
   [tableView endUpdates];
}

Başlangıç-bitiş güncelleme kısmı daha sonra açıklayacağım.

Şu anda seçili olan dizin varsa, o zaman, o satır daha fazla yer vermesi gerektiğini tableView söyleyebilirsin.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
   //check if the index actually exists
   if(selectedRowIndex && indexPath.row == selectedRowIndex.row) {
        return 100;
   }
   return 44;
}

Bu seçili hücre yüksekliği 100 dönecektir.

Şimdi başla/bitir güncelleştirmeleri geri dönebiliriz. Bu blok tüm tableView geometri yeniden tetikler. Ayrıca, bu blok sonunda genişleyen satır impresions veren animasyon.

Bu yararlı olduğunu umuyoruz, Pawel

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KittiesMama

    KittiesMama

    10 AĞUSTOS 2008
  • TopOfTheTech

    TopOfTheTech

    5 NİSAN 2010
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011