2012-11-15 16 views
8

Przechodzę od dostosowywania moich TableViewCells w tableView:cellForRow:atIndexPath: do korzystania z niestandardowej podklasy UITableViewCell. Oto, jak to zrobiłem:registerNib: forReuseidentifier z niestandardowymi UTTableViewCell i Komiksami

Najpierw utworzyłem pusty XIB, przeciągnąłem tam UITableViewCell i umieściłem na nim UILabel. Utworzono klasę (podklasa UITableViewCell) iw edytorze właściwości programu Interface Builder ustawiono klasę na MyCell. Następnie w moim TableViewController, umieścić następujące:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// load custom cell 
UINib *cellNIB = [UINib nibWithNibName:@"MyCell" bundle:nil]; 
if (cellNIB) 
{ 
    [self.tableView registerNib:cellNIB forCellReuseIdentifier:@"MyCell"]; 
} else NSLog(@"failed to load nib"); 
} 

Potem wymazane wszystkie niestandardowego kodu z tableView:cellForRow:atIndexPath: i pozostawione tylko standardowe linie:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"MyCell"; 
    MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    return cell; 
} 

Kiedy wpadłem to, jak oczekiwano zobacz grupę komórek z pojedynczą etykietą w każdej komórce (sama etykieta, którą upuściłem w środku podczas tworzenia XIB). Zamiast tego widzę tylko zwykłe białe puste komórki i dodawanie/usuwanie komponentów do układu XIB nie pomaga.

Spędziłem DZIEŃ próbując różnych opcji, takich jak ustawienie reuseIdentifier w Konstruktorze interfejsów dla niestandardowej komórki XIB i ładowanie widoku w tableView:cellForRow:atIndexPath:, ale nic nie pomogło.

Odpowiedz

10

... ale okazało się, że jedyną rzeczą, którą przegapiłem, było wyczyszczenie reuseIdentifier dla komórki prototypowej w mojej Storyboard dla tego TableViewController. Wygląda na to, że Storyboard inicjuje swoje widoki/komponenty później, niż wywoływane przez viewDidLoad i zamiast odbierania mojej ładnej komórki niestandardowej, xCode ustawia rzeczywisty widok komórki, aby ponownie użyć zwykłej białej komórki, która jest standardem dla nowo utworzonych TableViewController.

Więc jeszcze raz: przejdź do właściwości Tableview i wyjąć reuseIdentifier przed ustawieniem;)

spędzam tyle czasu na to, więc pomyślałem, że może to komuś pomóc, gdybym dzielić to doświadczenie tutaj.

Powiązane problemy