Dobra straciłem cierpliwość do tego kopiowania
Zrobiłem to bez tworzenia osobnego pliku z klasą, która dziedziczy po UITableViewCell.
Tak więc, krótki opis może komuś się przyda:
Nie należy dodawać do głównego pliku xib naszej komórki (UITableViewCell), lepiej utworzyć odrębny plik np. myCustomCell.xib ( nowy plik->user interface -> empty )
Wstawiamy w IB komórkę "Table View Cell" dodajemy do niej jakieś obiekty: label, image i co tam chcemy. Każdy taki obiekt ma swój tag, tak więc w celu identyfikacji trzeba nadać unikalny identyfikator dla takiego obiektu. Komórka też powinna mieć swój identyfikator. Wszystkie te czynności wykonujemy oczywiście bezpośrednio w IB.
W pliku xib możemy oczywiście mieć kilka takich komórek z odpowiednimi identyfikatorami, gdyż po pobraniu plik xib zwracana jest tablica z kolejnymi obiektami w pliku xib. Przykładowy kod z komentarzami:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"mycell";
/*
wskaznik label przetrzymuje referencje do obiektu typu UILabel w ten sposob dokonujemy zmiany
na wlasciwosciach obiektu label w danej komorce
*/
UILabel *label;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if(cell == nil)
{
/*
Wgrywamy plik MyCustomCell.xib (bez rozszerzenia .xib) z nasza komorka. Może być tam wiecej prototypow komorek.
Odwolujemy sie do tych obiektow poprzez kolejne indeksy zwroconej tablicy nib`ow
UWAGA: nalezy naszej komorce w IB nadac identyfikator a kazdemu obiektowi w komorce (label,image,itp) odpowiednie identyfikatory "tagi"
*/
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:self options:nil];
cell = [nib objectAtIndex:0]; // jesli mamy wiecej komorek to kazdy kolejny indeks odpowiada kolejnemu obiektowi w xib
NSLog(@"wsk: %p\n", cell);
}
/*
wiadomosc viewWithTag zwraca referencje do obiektu zawartego w komorce identyfikowanego przez tag !
W tym wypadku sa to obiekty label, kazdemu obiektowi label ustawilismy tag w IB, ktory go identyfikuje.
Trzeba oczywiscie rzutowac wynik metody viewWithTag na odpowiedni typ, gdyz moga to byc nie tylko
obiekty label !
*/
label = (UILabel *)[cell viewWithTag:1];
label.text = [samplearr objectAtIndex:indexPath.row];
label = (UILabel *)[cell viewWithTag:2];
label.text = @"test";
return cell;
}