2012-01-25 10 views
13

Próbuję wykorzystać nowy projektant Storyboard i łatwość rysowania komórek UITableView zamiast programowo "projektować" każdy wiersz.iPhone - sposób użycia Storyboard z niestandardowymi komórkami UITableView i CellWithIdentifier

Dobrym przykładem standardowej komórki jest związana tutaj na przepełnienie stosu: iPhone - dequeueReusableCellWithIdentifier usage

Zamiast połączonego podejścia używając „[komórka textLabel]” Chcę użyć własnych etykiet, przyciski i obrazy na szczycie każdego rzędu. Dlatego utworzyłem kilka prototypowych komórek/wierszy i przypisałem do nich identyfikatory (za pomocą Storyboard).

Teraz: jaki jest najmądrzejszy sposób uzyskiwania dostępu do "niestandardowych" kontrolek/etykiet każdego wiersza? Próbowałem wyszukać dostęp do nich według identyfikatora, ale niczego nie znalazłem. Moje myślenie było to powinno działać wzdłuż tej linii:

[[[cell subviews] getObjectByID:@"labelTime"] setText:@"Whatever"]; 

Czy moje oczekiwanie API całkowicie błędne lub nie po prostu znaleźć odpowiedni API jeszcze?

Wszelkie pomysły lub rekomendacje?

Odpowiedz

31

Dla każdej nowej niestandardowej komórki UITableView, którą tworzysz w scenopisie, będziesz chciał utworzyć nowy plik klasy, który implementuje UITableViewCell w celu połączenia z nim. Pamiętaj, aby odwzorować wszystkie elementy sterujące w nowej komórce, które umieściłeś w scenorysie na właściwościach instancji. Następnie użyjesz go z normalnym usuwaniem:

YourTableViewCellClass *cell = (YourTableViewCellClass*)[tableView dequeueReusableCellWithIdentifier:@"YourCellIdentifierStringDefinedInStoryBoard"]; 
// then set the properties for the class. 
cell.labelTime = @"whatever"; 
+0

Hit to ja, to było prawie proste! –

+0

Tak, właśnie zdałem sobie sprawę z tego wykorzystania siebie tydzień temu, znaleźć to bardzo ładne i szybkie. – mservidio

+0

Idealny .. Dzięki za pomysł –

8

Istnieją dwa sposoby uzyskania niestandardowych subskrybentów. Prostszym sposobem jest używanie tagów. Każdy widok ma właściwość tag, która jest liczbą całkowitą. Możesz ustawić tag w stalówce i ustawić lub pobrać kod. Możesz przeszukać drzewo widoku, aby wyświetlić widok z danym znacznikiem, wysyłając viewWithTag: do katalogu głównego drzewa. Tak więc, na przykład, można podać swój pogląd labelTime tag 57, a w kodzie, można znaleźć widok takiego:

UILabel *label = (UILabel *)[cell viewWithTag:57]; 

Minusem jest to, że za pomocą tagów trzeba zachować numery pasków zsynchronizować twój stalówka z kodem. Jeśli się nie zsynchronizują, albo otrzymasz błędny widok z powrotem, albo dostaniesz zero (a ponieważ możesz wysyłać wiadomości do zera, system nie da ci błędu, gdy tak się stanie). Mimo to tagi są tak wygodne, że często używa się ich w ten sposób.

Innym sposobem jest utworzenie niestandardowej podklasy o wartości UITableViewCell z właściwością IBOutlet dla każdego niestandardowego widoku podrzędnego. Można podłączyć wyloty do subviews w stalówki, a dostęp do subviews poprzez właściwości w kodzie:

MyTableViewCell *myCell = (MyTableViewCell *)cell; 
UILabel *label = cell.labelTime; 

Oznacza to pisanie o wiele więcej boilerplate niż przy użyciu tagów, ale ma tę zaletę, że będziesz otrzymuj ostrzeżenia lub błędy (podczas kompilacji lub przy pierwszej próbie ładowania stalówki), jeśli stalówka i kod się zsynchronizują.

+1

Jeśli ktokolwiek próbuje użyć tej metody, należy pamiętać, że bardzo trudno jest zrozumieć znaczenie viewWithTag: 57. Znacznie lepiej jest podklasować UITableViewCell. –

6

Nie bądź głupi jak byłem. :)

Upewnij się, że ustawienie Identifier wartość w Atrybuty Inspektor komórki niestandardowego.Ustawianie identyfikatora Restoration komórki niestandardowego w Identity Inspector jest zła droga, i to jest dokładnie to, co zrobiłem. Major facepalm dla siebie.

0

Aby uzyskać więcej informacji na temat implementacji, jak to zrobić, używając metod opisanych przez mservidio i rob, zapoznaj się z sekcją "Projektowanie własnych komórek prototypowych" pod numerem this tutorial.

Powiązane problemy