2012-06-09 14 views
12

Próbuję dowiedzieć się, jak mieć kilka komórek statycznych oprócz dynamicznych komórek (jak sądzę), ale kiedy uruchamiam nową aplikację Master-Detail i przełączam domyślne dynamiczne prototypy na Static Cells, ulega awarii.dezorientacja dotycząca komórek statycznych a komórek dynamicznych

Myślę, że ponieważ wciąż jestem w tym nowy, nie rozumiem, jak wszystkie komponenty (widoki tabel, komórki, delegaty) są połączone. Po przejściu na komórki statyczne zrobiłem trzy komórki, ale one się nie pojawiły. Aplikacja po prostu się zawiesza.

Mogę dołączyć kod, ale zasadniczo tworzę nowy Master-Detail, przełączam się na Static Cells, zmieniam nazwę trzech komórek i ulega awarii (w pętli głównej).

Dzięki za wszystko.

+0

Czy możesz udostępnić ślad stosu? – sosborn

Odpowiedz

45

Jeśli rozumiem Twoje pytanie, to jest wyjaśnienie szukasz:

Prototype (ponownego wykorzystania):

Podczas korzystania komórki dynamiczne, należy użyć komórki Prototype. Oznacza to, że albo w IB, albo w twoim kodzie, tworzysz instancję UITableViewCell i nadajesz jej identyfikator (reuseIdentifier). Urządzenie UITableView używa tego prototypu do generowania tylu komórek (wierszy), ile potrzebujesz. UITableView twórz (i korzystaj z pamięci) tyle komórek, ile potrzeba, aby wypełnić ekran. Po niektóre z tych komórek zgaśnie ekranie UITableViewponownie wykorzystuje im - przetwarza im.

Można zdefiniować więcej niż jeden prototyp komórkę w UITableView. Chodzi o to, że każdy prototyp służy innym celom. Na przykład można zdefiniować prototypową komórkę, która ma tylko jedną dużą wartość UILabel, a jej celem jest wykorzystanie tekstu statycznego. Definiujesz kolejny prototyp, który ma tylko jeden prototyp UIImageView. To zależy od twojego projektu i sposobu wyświetlania twoich danych.

Aby użyć komórki prototypowych, w IB, należy użyć dynamiczne prototypy komórek, i ustawić identifier. Następnie trzeba wdrożyć UITableViewDataSource metod, takich jak:

– tableView:numberOfRowsInSection: 
– tableView:cellForRowAtIndexPath: 

Te metody są metodami delegat UITableView.

Jeśli nie używa się IB, można utworzyć komórki w – tableView:cellForRowAtIndexPath: sposobem:

UITableViewCell * komórek = [[UITableViewCell Alloc] initWithStyle (UITableViewCellStyle) Typ reuseIdentifier (NSString *) reuseIdentifier];

Static:

Pomysł komórek statycznych jest właśnie prostota. Możesz użyć komórek prototypowych (na przykład tylko jednego prototypu) i podać statycznie NSArray, na przykład jako źródło danych. Aby wykonać zadanie polegające na wdrożeniu metod UITableViewDataSource, firma Apple wprowadziła komórki statyczne, w których wykorzystano tylko scenorys i IB. W IB wybieramy widok tabeli i zamiast tego wybierzmy i wpisujemy tekst lub ustawiamy obraz. Nie chcesz dokonywać żadnych dynamicznych zmian w komórkach statycznych później, gdy aplikacja jest uruchomiona, ponieważ nie jest przeznaczona do tego celu, a będziesz musiał wdrożyć wiele innych metod, które nie są tego warte. Chociaż nie jest to dużo pracy, aby uzyskać indexPath z wybranego wiersza, ale pomysł jest taki, że jeśli chcesz wypchnąć nowy widok z zaznaczenia komórki statycznej, użyjesz segues zamiast implementować dowolny kod.

Jeśli używasz komórek statycznych, nie powinieneś implementować metody UITableViewDataSource, w przeciwnym razie aplikacja ulega awarii i na odwrót, jeśli nie użyjesz metod UITableViewDataSource (wymaganych) podczas korzystania z komórek prototypowych, Twoja aplikacja ulegnie awarii.

+0

Mam zamiar to przejrzeć za pomocą grzebienia bezprzewodowego (czy napisałeś o tym? Czy też znalazłeś to gdzieś?), Ale pozbycie się metod UITableViewDataSource spowodowało, że sztuczka (musiała dodać "numberOfRowsInSection".) –

+2

Cieszę się, że zadziałało, czy to tylko dla ciebie, ale możesz znaleźć szersze wyjaśnienia tam na zewnątrz .. Powodzenia! – Canopus

+0

Jedną dobrą rzeczą, której nauczyłem się z tego wszystkiego, jest obszerna dokumentacja w Klasowym Odniesieniu (Organizator - Dokumentacja). Przeczytam wszystkie odnośne Dokumenty referencyjne klasy zanim opublikuję! –

Powiązane problemy