2010-07-03 18 views
11

¿Alguien sabe cómo agregar una barra de alcance a UITableView? La aplicación App Store hace esto a veces, como en la imagen siguiente.Barra de alcance para UITableView como App Store?

Me gustaría utilizar esta barra de alcance para agregar opciones de clasificación para los elementos en el UITableView. Esto sería más conveniente que tener una barra de herramientas con un UISegmentControl.

Simplemente no sé cómo implementar esto. Ni siquiera sé el nombre del elemento (lo llamo barra de alcance porque se parece a la barra de alcance de UISearchBar, pero no es así).

image showing what I want

+0

posible duplicado de [¿Cómo poner un UISegmentedControl bajo un NavigationController?] (Http://stackoverflow.com/questions/2673714/how-to-put-a-uisegmentedcontrol-under-a-navigationcontroller) – JosephH

Respuesta

2

El elemento es UISegmentedControl con el estilo UISegmentedControlStyleBar. Puede establecer la propiedad tintColor para obtener el color deseado. Simplemente coloque la vista sobre la vista de tabla y podrá obtener algo que se parezca a esa captura de pantalla.

+1

Gracias por eso . Simplemente no sé qué es ese tintColor, ¿verdad? –

+0

Podría experimentar hasta encontrar algo similar al de la aplicación App Store. – indragie

1

UISegmentedControl

crearlo, establecieron sus segmentos y establezca su delegado. El delegado entonces realiza algún tipo de acción cada vez que cambia el segmento seleccionado.

13

En realidad, a diferencia de lo que otros han dicho, la propiedad de esta UISegmentedControl .segmentedControlStyle se establece en un valor de indocumentado 7.

theSegCtrl.segmentedControlStyle = 7; 

Pero @Macatomy 's respuesta es más AppStore de fallos (aunque Apple no puede detectar este de todas formas).

+0

Eso es interesante. ¿Cómo se diferencia este estilo indocumentado del estilo documentado 'UISegmentedControlStyleBar'? – indragie

+0

Muy interesante. Y realmente funciona. Establece los colores de los botones a los representados, pero no conozco ninguna otra diferencia. ¿Y cómo supiste sobre esa línea de código, KennyTM? Gracias. –

+2

@Aloha: prueba y error :) – kennytm

4

Probablemente ya haya resuelto este problema, pero creo que esto puede ser útil para otras personas.

Dentro de su ViewController que se utiliza en ese TableViewController, debe insertar el siguiente código:

- (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; 

}

que inserta un control segmentado como el encabezado de la tabla, que (si lo desea) se también rebote cuando llegue a la parte superior de la lista y al mismo tiempo siempre permanecerá visible mientras se desplaza en su lista.

Espero que ayude.

Cuestiones relacionadas