Come cambio il colore dell’alfabeto laterale in un UITableView indicizzato?

Ho una vista tabella con un indice alfabetico e sto usando l’alfabeto laterale per ottenere rapidamente l’elenco. Per chi non lo conosce, questo lo usa:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { 

Il mio problema è che la mia applicazione è stata appena scorticata in nero. E così ora è difficile vedere le lettere dell’alfabeto sul lato.

Non riesco a capire come cambiare il colore dell’alfabeto. Mi piacerebbe che fosse ‘bianco’ se ansible.

Da quello che posso dire, sfortunatamente non è ansible personalizzare il colore del testo visualizzato nell’indice, il più vicino che ho potuto ottenere è stato in grado di modificare il colore di sfondo e il carattere dell’indice.

C’è del codice nel ricettario di iPhone Developers di Erica Sadun che mostra come accedere alla vista di UITableViewIndex (una class non documentata). È ansible trovare il riferimento ad esso a pagina 175 del libro, se ce l’hai. Che dà accesso al colore di sfondo e al carattere. Puoi vedere un documento non ufficiale relativo a questa class qui .

AVVISO Questo è l’uso non documentato di una class non documentata quindi è necessario essere cauti nell’utilizzarlo.

Ecco uno snippet di codice dal ricettario con piccole modifiche:

 - (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath { for(UIView *view in [tv subviews]) { if([[[view class] description] isEqualToString:@"UITableViewIndex"]) { [view setBackgroundColor:[UIColor whiteColor]]; [view setFont:[UIFont systemFontOfSize:14]]; } } //rest of cellForRow handling... } 

Questo illustra come accedere e visualizzare UITableViewIndex e modificarlo in alcuni aspetti. Sembra che la vista non abbia immagini secondarie, quindi è probabile che esegua qualche disegno personalizzato con l’array di titoli indice.

Non è perfetto, ma si spera che aiuti un po ‘.

Paolo

se la tua versione minima di iOS è più recente della 6.0, puoi usare la proprietà sectionIndexColor di UITableView .

Il colore da utilizzare per il testo dell’indice della vista tabella.

@property (nonatomic, retain) UIColor * sectionIndexColor

Discussione:

Le visualizzazioni delle tabelle possono visualizzare un indice lungo il lato della vista, rendendo più facile agli utenti la navigazione rapida del contenuto della tabella. Questa proprietà specifica il colore da utilizzare per il testo visualizzato in questa regione.


Data di aggiornamento 2014.1.13

Trovo una libreria di terze parti open source: GDIIndexBar per personalizzare l’aspetto dell’indice.

Questo può essere facilmente modificato nel builder dell’interfaccia per UITableView – Non è necessario utilizzare classi non documentate?

Vedi la schermata qui sotto, come puoi vedere il colore del carattere e anche il colore dello sfondo può essere cambiato. Giobbe è un buono!

Per iOS7 o versioni successive:

 self.tableView.sectionIndexColor = [UIColor whiteColor]; self.tableView.sectionIndexBackgroundColor = [UIColor clearColor]; 

Stavo avendo lo stesso problema e ho appena scoperto un modo per farlo, anche se questo sta usando classi e metodi non documentati quindi pensaci un altro tempo prima di provare a caricarlo su App Store. Devo dire che l’ho provato solo con iOS5, quindi non so se funzionerà con le versioni precedenti.

Ho preso in prestito e modificato l’esempio del libro di ricette di Erica Saunders in modo che ora cambi il colore del testo in rosso:

 - (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath { for(UIView *view in [tv subviews]) { if([[[view class] description] isEqualToString:@"UITableViewIndex"]) { [view performSelector:@selector(setIndexColor:) withObject:[UIColor redColor]]; } } //rest of cellForRow handling... } 

Abbiamo usato con successo il seguente codice:

 for(UIView *view in [tableView subviews]) { if([view respondsToSelector:@selector(setIndexColor:)]) { [view performSelector:@selector(setIndexColor:) withObject:[UIColor whiteColor]]; } } 

che funziona bene – è molto simile alla risposta di Mooglas – ma si astiene dall’usare la parola “UITableViewIndex”.

È ansible impostare il colore della tinta per TableView.

 [[UITableView appearance] setTintColor:[UIColor purpleColor]]; 

C’è un modo per cambiare il colore dell’alfabeto dell’indice.

Nel file di intestazione, dichiara UITableView come una proprietà:

 @property (weak, nonatomic) IBOutlet UITableView *mainTable; 

Quindi, nel file di implementazione viewDidAppear, utilizzare la seguente riga:

 //Change the color of the UITableView index color _mainTable.sectionIndexColor = [UIColor blackColor]; 

Ecco la soluzione migliore che ho trovato per regolare il colore di sfondo della barra dell’indice sul lato. Funziona su iOS7 e probabilmente su iOS6.

Aggiungi questo al tuo viewDidLoad

 if ([_tableView respondsToSelector:@selector(setSectionIndexColor:)]) { _tableView.sectionIndexBackgroundColor = [UIColor clearColor]; _tableView.sectionIndexTrackingBackgroundColor = [UIColor whiteColor]; } 

Il primo è il colore predefinito, il secondo è il colore dello sfondo quando si scorre.

Crea una matrice mutabile per contenere l’etichetta del titolo alternata

 -(NSArray * )sectionIndexTitlesForTableView:(UITableView * )tableView 

restituisce un array di @ “” dove il numero di spazi tra le virgolette determina la larghezza dello scroller hi-light. Avere “sectionIndexTitlesForTableView” chiama una funzione di etichetta di aggiornamento. In questa funzione rimuovi tutte le etichette nell’array creato in precedenza dalle loro anteprime, quindi crea e aggiungi anche se sono necessarie molte etichette. Quindi aggiungili alla superview del tavolo.

Queste sono le linee richieste per posizionare le etichette nel posto giusto.

 rect.origin.x = table.frame.origin.x+table.frame.size.width-rect.size.width-2; rect.origin.y = 5+table.frame.origin.y+counter *(280-rect.size.height-([customIndexLabels count]-1))/([customIndexLabels count]-1); if ([customIndexLabels lastObject]==thisLabel) { rect.origin.y-=10; } 

Spero possa aiutare. Non è perfetto, non mi interessa abbastanza per sistemarlo da solo. Il problema principale è che la spaziatura dell’ultima etichetta non è uniforms.

Swift 4.1 e Xcode 9.4:

 tableView.sectionIndexColor = .red tableView.sectionIndexBackgroundColor = .clear 

Edizione rapida per modifica dei caratteri non documentata:

 extension NSObject { class func objectClassName() -> String { let classLongName = reflect(self.self).summary; let tokens = classLongName.componentsSeparatedByString(".") if let typeName = tokens.last { return typeName } return NSStringFromClass(self.dynamicType) } } func changeSectionIndexFont(tableView: UITableView) -> Void { let realSubviews = tableView.subviews as! [UIView] for subview in realSubviews { if subview.dynamicType.objectClassName() == "UITableViewIndex" { subview.setValue(UIFont(name: "OpenSans", size: 10), forKey: "font") } } }