2010-07-03 1 views
11

Qualcuno sa come aggiungere una barra di campo a UITableView? L'app App Store lo fa a volte, come nell'immagine qui sotto.Scope Bar per UITableView come App Store?

Vorrei utilizzare questa barra di ambito per aggiungere opzioni di ordinamento per gli elementi nello UITableView. Ciò sarebbe più conveniente rispetto a una barra degli strumenti con un UISegmentControl.

Solo che non so come implementarlo. Non conosco nemmeno il nome dell'elemento (lo chiamo scope bar perché assomiglia alla barra dell'ambito di uno UISearchBar, ma non lo è).

image showing what I want

+0

possibile duplicato di [Come mettere un UISegmentedControl sotto un NavigationController?] (Http://stackoverflow.com/questions/2673714/how-to-put-a-uisegmentedcontrol-under-a-navigationcontroller) – JosephH

risposta

2

L'elemento è uno UISegmentedControl con lo stile UISegmentedControlStyleBar. È possibile impostare la proprietà tintColor per ottenere il colore desiderato. Basta mettere la vista sopra la vista tabella e si può ottenere qualcosa che assomiglia a quello screenshot.

+1

Grazie per quello . Non so cosa sia quel tintColor, vero? –

+0

Puoi sperimentare fino a quando non hai trovato qualcosa di simile a quello nell'app App Store. – indragie

1

UISegmentedControl

Si crea esso, istituito suoi segmenti, e impostare il suo delegato. Il delegato esegue quindi una sorta di azione ogni volta che cambia il segmento selezionato.

13

In realtà, a differenza di ciò che altri hanno detto, la proprietà di questo UISegmentedControl .segmentedControlStyle è impostato su un valore non documentata di 7.

theSegCtrl.segmentedControlStyle = 7; 

Ma @Macatomy 's risposta è più AppStore di sicurezza (anche se Apple non è in grado di rilevare questo Comunque).

+0

È interessante. In che modo questo stile non documentato differisce dallo stile documentato 'UISegmentedControlStyleBar'? – indragie

+0

Davvero interessante. E funziona davvero. Imposta i colori dei pulsanti per quelli raffigurati, ma non conosco altre differenze. E come facevi a sapere di quella linea di codice, KennyTM? Grazie. –

+2

@Aloha: prova ed errore :) – kennytm

4

Probabilmente hai già risolto questo problema ma credo che questo possa essere utile per altre persone.

All'interno della vostra ViewController che si utilizza in questo TableViewController, si dovrebbe inserire il seguente codice:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

NSArray *segmentTextContent = [NSArray arrayWithObjects: @"one",@"two",@"three", nil]; 
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentTextContent]; 
segmentedControl.frame = CGRectMake(2, 5, 316, 35); 

[self.segmentedControl addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged]; 
self.segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; //changes the default style 
self.segmentedControl.tintColor = [UIColor darkGrayColor]; //changes the default color 
self.segmentedControl.enabled = true; 
self.segmentedControl.selectedSegmentIndex = 0; 

return self.segmentedControl; 

}

che inserisce un controllo segmentato come l'intestazione della tabella, che (se lo si desidera) sarà rimbalza anche quando raggiungi la cima della lista e allo stesso tempo rimarrà sempre visibile mentre scorri la tua lista.

Spero che aiuti.