2009-12-03 19 views
8

Seçildiğinde, hücrenin textLabel ve detailTextLabel öğelerini değiştirmek istiyorum. Ben aşağıdaki denedim ama hiçbir değişiklik oluşur:UITableViewCell seçildiğinde textLabel öğesini nasıl değiştirirsiniz?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyAppDelegate *appDelegate = (MyPhoneAppDelegate*)[[UIApplication sharedApplication] delegate]; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.detailTextLabel.text = @"xxxxx"; 
    cell.textLabel.text =  @"zzzzz"; 
    [tableView reloadData]; 
} 

cevap

-1

Eğer bütün tabloyu yeniden yerine sadece seçili hücreyi yenilemek için çalıştı mı? Bu daha iyi performans olacak ve ben değilim ama bütün tablo yenilemek durumunda seçim kaybolur varsayalım

[cell setNeedsDisplay];

yerine

[tableView reloadData];

arasında (bu nedeni olabilir Sonunda herhangi bir değişiklik görmüyorsanız) ....

+0

aramaya değiştirilmesi düşünün yeni bir boş masa görünümü başlatmasını olmasıdır Özel bir hücre görünümü kullanıyorsanız ne olur? – meridimus

+0

özel bir hücre görünümü, bir UITableViewCell öğesinin contentView'una ayarlanmış bir görünümdür, yani aynı, setNeedsDisplay contentView öğesini yeniden çizecektir. – yonel

2

Bir hücre seçiliyken tabloyu yeniden yüklemeye çalışmamalısınız. Etiketlere yukarıdaki değişiklikleri yaptıktan sonra yerine

[hücre setNeedsLayout]

deneyin.

Ayrıca, yöntemdeki uygulama temsilcisine başvuruda bulunmanızın bir nedeni var mı?

+0

Bu benim için mükemmel çalıştı. Teşekkürler! – Nick

10

Tablo görünümünün yeniden yüklenmesi, tableView:cellForRowAtIndexPath: kullanarak tüm hücreleri boşaltacak ve yeniden gösterecek/görüntüleyecek ve tableView:didSelectRowAtIndexPath: yönteminizde güncellenmiş @ "xxxxx" ve @ "yyyyy" değil orijinal verileri kullanacaktır. Yeni iPad Projesi (Bölünmüş görünüm) oluştur

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

    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.text = @"it was tapped"; 
} 
0

ve Şimdi sınıfta geleneksel> Dosyalar geçmesi:

küçük bir test projede Birlikte seçimi üzerine etiketleri değiştirmek başardı. En kolay yol orada verildi. XCode'un Üretilen Kodları.

Örnek Kod Hatları: -

cell.textLabel.text = [NSString stringWithFormat:@"Row %d", indexPath.row]; 

Seçtiğiniz (indexPath tarafından açıklanmıştır) hücreyi yeniden cellForRowAtIndexPath ||&& didSelectRowAtIndexPath ..

2

deneyin bunları kullanabilirsiniz:

[yourTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
0

emin değil ne 'temsilci ile yapmaya çalışıyorum, ancak tableView çağrısı zaten çağrılan deneyin; yani Belki de iyi değilim

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath: indexPath]; 

çağrı Diyeceğim sen

UITableViewCell *cell = [**tableView** cellForRowAtIndexPath: indexPath]; //cell has nothing it is new. 

eski

UITableViewCell *cell = [**self.tableView** cellForRowAtIndexPath: indexPath]; //now you have one that has a textField already in it 
+0

Ne dediğimi görüyor musunuz? Eski olanı değil, yeni bir örnek oluşturuyorsun. –

+0

Yeni bir tane oluşturursanız, tablo görünümünde görmek için verileri yeniden yüklemeniz gerekir. Eski olanı kullanırsanız, görünüm değişiklikleri yansıtacaktır. –