Mam NSDictionary
że powiemy jest tak:Wiele różnych UITableViewCells w jednym Tableview
key: value:
name Bookshelf
movies Array containing: (Movie 1, Movie 2, Movie 3)
books Array containing: (Book 1, Book 2, Book 3)
music Array containing: (Music 1, Music 2, Music 3)
I tak dalej. Teraz staram się stworzyć tableView wyświetlający wszystkie te informacje, ale z różnymi typami komórek na podstawie tego, jaki jest klucz słownika. Na przykład filmy używają książek o numerach cellForMovies
, które używają cellForBooks
do używania muzyki cellForMusic
, każdy ma własny układ.
Oczywiście upraszczam, ale mam nadzieję, że rozumiesz, co próbuję zrobić.
Jestem w stanie to zrobić, jeśli wykonuję sekcje i inny typ komórki dla każdej sekcji, ale nie chcę tego robić. Chcę, aby móc mieć tabeli tak, na przykład:
cellForBooks
cellForMovies
cellForMovies
cellForMusic
cellForBooks
i tak dalej ... Wszelkie pomysły i zasoby można sobie powiedzieć do? Dbam tylko o wsparcie dla iOS 5 (storyboardy).
Edit roztworem:
Wielkie podziękowania dla wszystkich, którzy pomogli, zwłaszcza Atticus którzy włożyli końcowego kawałek razem.
W efekcie powstała zmiana struktury danych na tablice słowników, a następnie dodanie do każdego wpisu wartości Key: type Value: book/movie/music
. Struktura danych teraz wygląda:
Array[0]: Dictionary: [Key: type Value: book], [Key: name Value: Physics];
Array[1]: Dictionary: [Key: type Value: music], [Key: name Value: Rock];
Następnie skonfigurować komórki Zrobiłem to:
NSString *CellIdentifier = @"Cell";
NSDictionary *object = [self.listOfStuff objectAtIndex:indexPath.row];
if ([[object objectForKey:@"type"] isEqualToString:@"book"]){
CellIdentifier = @"BookCell";
}else if ([[object objectForKey:@"type"] isEqualToString:@"music"]){
CellIdentifier = @"MusicCell";
}else if ([[object objectForKey:@"type"] isEqualToString:@"movie"]){
CellIdentifier = @"MovieCell";
}
każdy z nich miał inny tableviewcell w serii ujęć. Zorientowaliśmy się, jeśli chcesz korzystać z żadnej z wbudowanych funkcji komórkowych, jak cell.textLabel.text
trzeba było to zrobić:
cell.textLabel.text = [object objectForKey:@"name"];
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.textLabel.opaque = NO;
Nadzieja to pomaga kogoś innego w przyszłości.
Czy jest gdzieś scenopis? Nie widzę jednego w repozytorium. – atticus
Został zlokalizowany z jakiegoś powodu. Jest w katalogu en.lprog. –
Mam to. Wszystko w porządku, z wyjątkiem korzystania z wbudowanej właściwości textLabel w komórce niestandardowej. Po ustawieniu komórka un-ukrywa je, a kolor tła etykiety jest biały. Po wybraniu komórki tymczasowo powoduje, że tło jest jasne i można zobaczyć elementy za nim. Jeśli chcesz użyć wbudowanej textLabel, to dobrze, po prostu ustaw kolor tła, aby wyczyścić: \t 'cell.textLabel.backgroundColor = [UIColor clearColor]; cell.textLabel.opaque = NO; ' – atticus