2010-10-08 9 views
5

Próbuję napisać kod, aby zmodyfikować kolor tła komórki na podstawie jej pozycji w tabeli. Podczas gdy poniższy kod "działa", działa tylko na komórki, które są do niego przekazywane. Puste komórki nie zostają wprowadzone.Jak zmodyfikować kolor tła pustego obiektu UITableViewCell na podstawie jego położenia?

- (void)tableView: (UITableView*)tableView willDisplayCell: (UITableViewCell*)cell forRowAtIndexPath: (NSIndexPath*)indexPath 
{ 
    if(!indexPath.row%2) 
    { 
     cell.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] ; 
     NSLog(@"Blue"); 
    } 
    else{ 
     cell.backgroundColor = [UIColor whiteColor]; 
     NSLog(@"white"); 
    } 
    cell.textLabel.backgroundColor = [UIColor clearColor]; 
    cell.detailTextLabel.backgroundColor = [UIColor clearColor]; 
} 

Jak mogę wpłynąć na pozostałe wyświetlane komórki, jeśli są puste, gdy na liście jest niewiele pozycji?

Przez "puste" komórki mam na myśli komórki zastępcze, które są wyświetlane, gdy źródło danych nie ma wystarczającej ilości danych, aby wypełnić cały widok podany w widoku tabeli. Na przykład, jeśli możesz zmieścić 10 komórek, ale masz tylko 5 wartości danych, możesz tylko przekazać 5 komórek do pracy - następne 5 jest puste i, o ile mogę to powiedzieć, niedostępne.

+0

, więc chcesz, aby komórki tabeli zmieniały kolor na niebieski i biały, niezależnie od tego, czy w komórkach znajdują się dane, czy puste? – Nabou

+0

@Nabou Tak, tego właśnie pragnąłem - dawno temu. W międzyczasie przeniosłem się jednak w międzyczasie. Ten problem jest w tej chwili czysto teoretyczny. Aplikacja "zmarła" dawno temu (podobnie jak cała firma rozwijająca to oprogramowanie). – RonLugge

Odpowiedz

0

Należy wdrożyć

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

w swoim delegatem i zainicjować komórek, jak chcesz.

+0

Niestety, to nie działa. Dodanie kodu: cell.backgroundColor = [UIColor colorWithRed: 1.0 green: 0.0 blue: 0.0 alpha: 1.0]; nie robi nic, aby zmienić którąkolwiek z komórek, wszystkie są domyślnie biało-szare. – RonLugge

2

Chyba chcesz zmienić tylko tło "pustych" komórek ... Następnie możesz zmienić backgroundColor w InterfaceBuilder z UITableView. Ale wpłynie to na wszystkie puste komórki.

Można również zmienić typ separatora.

Również rzucić okiem tutaj: http://www.zenbrains.com/blog/en/2010/06/color-de-fondo-de-celdas-vacias/

EDIT:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // 7 depends on how many cell is shown 
    return ([source count] <= 7) ? 7 : [source count]; 
} 

Od: Show blank UITableViewCells in custom UITableView

+0

Chcę wykonać wszystkie komórki - chcę, aby wszystkie wyświetlane komórki odbijały się pomiędzy dwoma wskazanymi kolorami.Niestety, wyświetlany link nie zapewnia użytecznego źródła; jeśli spróbuję ustawić kolor tła contentView, to nie zmieni to poprawnie koloru całej komórki. Po prawej stronie znajduje się "pasek" niezmienionego koloru. I zmieniając go tak, że zmieniam selectedBackgroundView, lub po prostu backgroundView, też nic nie robię. – RonLugge

+0

Edytuję moją odpowiedź: musisz sam dodać dodatkowe komórki, a teraz w komórceForRowAtIndexPath wszystkie komórki będą konfigurowalne. –

+1

Problem polega na tym, że nie mam tych dodatkowych komórek (pod względem danych źródłowych), co powoduje inne niezamierzone wyniki. – RonLugge

1

To powinno działać, jeżeli nieruchomość backgroundColor z komórki contentView jest ustawiony, a nie backgroundColor komórki:

cell.contentView.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] ; 
+0

Edytowałem pytanie, aby wyjaśnić sprawę. (Chociaż jestem zaskoczony, że zostało to wykopane dwa lata później ...) – RonLugge

0

Spróbuj dodać następujący wiersz

[[cell contentView] setBackgroundColor:[UIColor colorWithRed:0 green:128/255.f blue:0 alpha:1]]; 

w metodzie

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

z tą samą logiką użytego w metodzie willDisplayCell

jak sugeruje tutaj: http://www.zenbrains.com/blog/en/2010/06/color-de-fondo-de-celdas-vacias/

* Uwaga, zmieniamy kolor tła dla [cell contentView]

+0

Przeczytaj uważnie to pytanie. Nie chodzi o to, aby ustawić kolor tła stołu, chciałem zmienić kolor rzeczywistych komórek, w tym pustych komórek. – RonLugge