2011-01-29 11 views
41

W tableView:cellForRowAtIndexPath: Mam następujący:W UITableView, cell.detailTextLabel.text nie działa ... dlaczego?

cell.textLabel.text = @"label"; 
cell.detailTextLabel.text = @"detail"; 

W textLabel pokazuje jak oczekiwano, ale detailTextLabel nie pojawia się w ogóle, chociaż nie ma diagnostyki. Spodziewałem się, że tekst "szczegółów" pojawi się w komórce w drugiej linii, poniżej "normalnego" tekstu, prawdopodobnie z mniejszym rozmiarem czcionki.

To samo pytanie jest zadawane w innym poście, a użytkownik "jbrennan" odpowiedział, że styl komórki widoku tabeli musi być inny niż UITableViewCellStylePlain. Wydaje się jednak, że istnieją tylko dwa możliwe style: UITableViewCellStylePlain i UITableViewCellStyleGrouped. Otrzymuję taki sam wynik (albo nie pojawia się etykieta szczegółów).

Czy jest inny styl komórki, którego nie widzę w dokumentacji? Czy zmiana UITableView w ostatniej aktualizacji i detailTextLabel nie jest już dostępna? Czy muszę zrobić coś ekstra, aby się pojawiło? Jakieś sugestie?

Używam xcode 3.2.5 i budynku dla iPhone 4.2 Simulator.

Odpowiedz

111

Twój inicjalizacji musi być zmieniony do tego:

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier] autorelease];

mam podkreślone i pogrubione części trzeba zmienić.

+0

Dobrze! Dziękuję Ci. Próbowałem zmienić styl na Subtitle, ale zmieniłem UITableViewStyle zamiast UITableViewCellStyle i nie skompilowałem, więc myślałem, że styl Subtitle nie jest już dostępny. – RobertL

+1

Haha! Wszyscy robimy głupie błędy podczas kodowania. Myślę, że gdyby Apple wyłączył podtytuł, pojawiłyby się zamieszki. –

+3

Wygląda na to, że za każdym razem zainicjuje nowy UITableViewCell, zamiast odrywać się od stosu, aby zachować pamięć. Wydaje się, że jedynym sposobem na ponowne wykorzystanie komórek stylu UITableViewCellStyleSubtitle byłoby podklasy, zastąpić inicjatora i wywołaj zwykłe '[tableView dequeueReusableCellWithIdentifier: @" ReuseIdentifier "];' Czy ktoś może potwierdzić lub zaprzeczyć? Zobacz dyskusję na temat 'initWithStyle: reuseIdentifier:' https://developer.apple.com/library/ios/documentation/Uikit/reference/UITableViewCell_Class/index.html#//apple_ref/occ/instm/UITableViewCell/initWithStyle:reuseIdentifier: –

14

Musisz ustawić typ komórki na Podtytuł, gdy ją przydzielisz.

+0

Dobrze! Dziękuję Ci. Zobacz mój komentarz do wcześniejszej odpowiedzi. – RobertL

12

Podczas korzystania z Xcode 4.2, ustaw Styl widoku tabeli na Podtytuł w Storyboard. dequeueReusableCellWithIdentifier zwróci zainicjowaną komórkę.

3
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
          reuseIdentifier:CellIdentifier]; 
4

Ustaw styl tabeli Zobacz komórki do napisów w Storyboard

i napisać ten kod, aby skonfigurować ty komórki

if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:BasicCellIdentifier] autorelease]; 
} 

enter image description here

0

Swift 3:

Jeśli jesteś m aking komórki z przesłanianie „cellForRowAt indexPath” Funkcja:

let tableContent = ["1", "2", "3", "4", "5"] 
let tableDetailContent = ["a", "b", "c", "d", ""] 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "yourCellIdentifier") 
    cell.textLabel?.text = tableContent[indexPath.row] 
    cell.detailTextLabel?.text = tableDetailContent[indexPath.row] 

    return cell 
} 

enter image description here

Ta część kodu z góry pozwala ustawić detailTextLabel .. Można ustawić co chcesz na storyboard dla Table View stylu komórki (Niestandardowy, Podstawowy, Prawy szczegół, Lewa szczegółowość, Podtytuł), linia ta zastąpi to:

style: UITableViewCellStyle.subtitle 
Powiązane problemy