Cum setează culoarea de fundal pentru antetul secțiunii specifice?

Am un TableView cu 10 secțiuni care sunt încărcate dintr-un fișier plist și am switch-uri cu care unele secțiuni pot fi dezactivate. Trebuie să stabilesc o anumită culoare de fundal pentru fiecare secțiune cu faptul că secțiunea poate fi dezactivată.

Exemplu:

for section Black I need to set black background

for section Red I need to set red background

si asa mai departe...

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *tempHeaderView=[[UIView alloc]initWithFrame:CGRectMake(0,0,320,44)];
     tempHeaderView.backgroundColor=[UIColor blackColor];

     [tempHeaderView addSubView: tempHeaderLabel];
     return tempHeaderView;
}
0
adăugat editat
Vizualizări: 1
Cu excepția cazului în care utilizați ARC (numărarea automată a referințelor), codul dvs. scade tempHeaderView. Vedeți răspunsul meu pentru o remediere în acest caz.
adăugat autor Nicolas Miari, sursa
+1 pentru utilizarea ARC :)
adăugat autor Nicolas Miari, sursa
Eu folosesc ARC ... multumesc!
adăugat autor Pavel Kaljunen, sursa

2 răspunsuri

Păstrați un NSArray al obiectelor UICcolor ca variabilă de instanță a clasei dvs. (controlerul vizual care acționează ca delegat/sursă de date) code>. Puteți inițializa culorile din acest tabel din valorile din plist, sau puteți codifica greu culorile.

Apoi, folosiți acest cod:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *tempHeaderView=[[UIView alloc]initWithFrame:CGRectMake(0,0,320,44)];


   //This changed:
    tempHeaderView.backgroundColor = [sectionColors objectAtIndex:section];

    [tempHeaderView addSubView: tempHeaderLabel];

    return tempHeaderView;
   //Use 'return [tempHeaderView autorelease];' in a non-ARC environment
}

Acesta este modul în care ați putea inițializa matricea:

// Assuming your table has three sections (indices 0 through 2)

UIColor* colorForSection0 = [UIColor colorwithRed:redValue0 green:greenValue0 blue:blueValue0 alpha:1.0];
// redValue0, etc. are floats between 0.0 and 1.0 that you can read from a .plist
// Alternatively, store them as integers between 0 and 255, and divide them by 255.0 
// and store on CGFloat variables before creating color.

// ...Do the same for the other colors...

// Now that you have the colors, create array and store in ivar 'sectionColors'
sectionColors = [[NSArray alloc] initWithObjects: 
    ColorforSection0, ColorForSection1, colorForSection2, nil];

(codul de mai sus ar trebui să meargă în interiorul inițializatorului sursei de date din tabelul de vizualizare)

3
adăugat
Desigur ... Dar puteți citi valorile R, G, B din plist și inițializați culorile în consecință. Dar ideea este aceeași: are nevoie de o gamă de culori UICcolor și pentru a selecta culoarea la secțiunea "index". Nu am intrat în detaliu despre cum ar trebui să creeze matricea.
adăugat autor Nicolas Miari, sursa
Tocmai am editat răspunsul pentru a clarifica faptul că nu puteți citi UICoror direct din .plist.
adăugat autor Nicolas Miari, sursa
Vă dau un exemplu și îmi veți da o bifă;)
adăugat autor Nicolas Miari, sursa
Eu nu sunt un expert InterfaceBuilder, dar poate că există o modalitate de a stoca o gamă de culori undeva în NIB-ul relevant?
adăugat autor Nicolas Miari, sursa
Cred că asta am nevoie. Mulțumesc!
adăugat autor Pavel Kaljunen, sursa
UICcolor nu poate fi stocat direct într-un plist, însă acest concept poate fi ușor adaptat pentru a folosi șiruri de caractere în plist pentru a reprezenta culoarea pe care o puteți utiliza.
adăugat autor Chris Trahey, sursa
Notă privind puritatea MVC; se recomandă ca orice din plist să fie doar model (adică starea activată a secțiunilor) și nu stil (adică ce culoare ar trebui să fie o secțiune dezactivată). Deci, o astfel de soluție ar trebui să implice opinia că ar fi responsabilă de contracția matricei UICcolors. Pedantic, poate, dar avem aceste modele pentru un motiv, așa că merită menționat.
adăugat autor Chris Trahey, sursa

Va trebui să utilizați secțiunea transmisă și să o raportați la una dintre secțiunile din fișierul tău plist. Probabil că veți încărca un dicționar al "secțiunii" așa cum există în plist (probabil încărcat pe baza poziției sale într-o matrice care este aceeași cu secțiunea) și apoi utilizați valueForKey: @ "enabled" sau similar într-un if() verificați și setați starea dvs. în consecință.

2
adăugat