2016-02-01 15 views
5

Jak mogę udostępnić jeden xib wśród wielu podklas UITableViewCell?Wiele podklas UITableViewCell przy użyciu tego samego xib?

Wszystkie mają ten sam interfejs widoku, więc nie chcę powtarzać tego samego numeru xib tylko po to, aby zmienić klasę komórki.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.tableView registerNib:[UINib nibWithNibName:@"BaseCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"BaseCell"]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    BaseCell *baseCell = [tableView dequeueReusableCellWithIdentifier:@"BaseCell" forIndexPath:indexPath]; 

    ... 

Co muszę tutaj zamiast jest instancją mój ChildCell - który jest podklasą BaseCell. Jakieś pomysły?

+0

Zmiana struktury klasy może być lepszym podejściem. Dodawanie stanów dla komórki i reagowanie zgodnie z bieżącym stanem komórki to inna opcja. – meth

Odpowiedz

1

Używaj kompozycji, a nie dziedziczenia. Zachowaj relację 1-1 między klasą BaseCell i jej komórką w końcówce, dodaj właściwość dla obiektu implementacji, który utworzysz i dodasz do obiektu komórki po usunięciu go.

1

Teraz nie ma możliwości użycia tej samej xib dla wielu komórek.

Ale możesz oddzielić część Xib, której użyje cała komórka.

W każdej komórce ustawisz wyeksponowanie do tego widoku klasy, a teraz możesz ponownie użyć tego widoku dla wszystkich komórek.

możesz zobaczyć moje zdjęcie dla tego przykładu:

pierwszej komórki:

enter image description here

druga komórka: enter image description here

I subview dwa wykorzystanie komórek:

enter image description here

Teraz nie potrzebujesz duplikatu XIB i możesz ponownie użyć tej części interfejsu.

Powiązane problemy