2012-01-23 37 views
7

Ahoy!Tworzenie wielokrotnego użytku UIView podobną do UITableViewCell

Próbuję utworzyć wielokrotnego użytku UIView (z różnych powodów), podobny do stosowanego w realizacji UITableViewCell UITableViewController. Chciałbym użyć widoku wielokrotnego użytku w UIScrollView, więc wiem, że nie próbuję osiągnąć czegoś, co jest całkowicie nieosiągalne.

Domyślna implementacja tego jest:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //declare cell identifier 
    static NSString *cellIdentifier = @"cell_identifier"; 

    //dequeue cell 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    //check cell is valid 
    if(cell == nil) 
    { 
     //create a new cell 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
    } 

    // 

    //return cell 
    return cell; 
} 

Z tego, warto zauważyć, że komórka jest rozkolejkowywana z UITableView. Jeśli komórka jest nieważna, tworzona jest nowa komórka. Moje pytanie brzmi, w jaki sposób ta komórka staje się później "w kolejce" do ponownego użycia?

Mój obecny usiłował realizacja wygląda następująco:

- (TestScrollViewCell *)scrollView:(TestScrollView *)_scrollView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //declare cell identifier 
    static NSString *cellIdentifier = @"cell_identifier"; 

    //dequeue cell 
    TestScrollViewCell *cell = (TestScrollViewCell *)[scrollView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    //check cell is valid 
    if(cell == nil) 
    { 
     //create a new cell 
     cell = [[TestScrollViewCell alloc] initWithFrame:CGRectZero]; 
    } 

    // 

    //return cell 
    return cell; 
} 

myślę, że dodanie NSMutableDictionary do mojego TestScrollView przechowywać cellIdentifier i TestScrollViewCell (UIView), a następnie wyrywanie ich z powrotem na podstawie słownika klucz byłby dobrym początkiem, ale czy to naprawdę jest prawdziwa implementacja komórek "wielokrotnego użytku"?

Problem widzę jest to, że chciałbym być następnie dodanie UIView do Scrollview który umieszczony jest w oparciu o ramy. Odznaczenie widoku w tym sensie nie pozwoliłoby mi dodać widoku do widoku przewijania bez wpływu na pierwszy widok (przez modyfikację ramki), ale z pewnością tak działają UITableViewCells, a także nagłówki/stopki sekcji?

Patrzyłem na this implementation, która wydaje się podążać tą samą trasą, którą zamierzałem wprowadzić, ale nie jestem w 100% sprzedana, że ​​jest to prawdziwa implementacja komórek wielokrotnego użytku.

Czy ktoś miał szczęścia z tym wcześniej? Próbuję zabrać Apple'a na prowadzenie, ale poza UITableViewCell i MKAnnotationView (MapKit) nie ma dla mnie dostępnych dostępnych implementacji tego.

Każda pomoc zostanie bardzo doceniona.

Odpowiedz

3

To nie tylko widok, to cała UITableViewController musisz odtworzyć. Przepływ ponowne idzie tak: dequeueReusableCell dostaje pusty ponownie wykorzystane komórkę z jakimś przechowywania, jak sądzę, z NSMutableArray (chwycić pierwszy obiekt z tablicy, a następnie usunąć je z tablicy i zwraca go). Jeśli tablica jest pusta, metoda zwraca zero. Sprawdzasz wartość komórki, jeśli jest zerowa, tworzysz nową instancję klasy komórkowej. Jeśli nie jest zerowy, wypełniasz go swoimi danymi. Dotyczy to każdej widocznej komórki, czyli każdej komórki mieszczącej się na ekranie. Wszelkie niewidoczne komórki nie są inicjowane. Gdy użytkownik przewija tabelę, komórka, która zniknęła całkowicie poza ekranem (nie jest widoczna pojedynczy piksel) wysłana do reuseQueue - wszystkie jej subviews i wartości powracają do wartości domyślnych lub po prostu są nilled, a następnie komórka zostaje dodana do końca naszej NSMutableArray, która jest kolejką. Mam nadzieję, że wyjaśniłem wystarczająco dobrze. EDYCJA: Aha, i jeszcze jedno - będziesz potrzebować różnych kolejek ponownego użycia dla każdego identyfikatora ponownego użycia.

Powiązane problemy