2009-08-24 16 views
17

He creado un UITableView y me gustaría que un UITableViewCell específico aparezca seleccionado (azul) cuando se carga la vista.¿Cómo selecciono una UITableViewCell por defecto?

+0

Ver esta pregunta: http://stackoverflow.com/questions/19295297/uitableviewcell- set-selected-initial/25128427 # 25128427 –

Respuesta

0

utilizar el método de UITableViewCell

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 

Información here.

+0

¿Quizás el siguiente método sea mejor? http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableViewCell/setHighlighted:animated: –

+0

¿qué método? el enlace no va a ningún método en particular – Daniel

+1

O si lo usa, ese lo resalta y no lo selecciona, supongo que si eso es todo lo que quiere el asker, entonces seguro que es más adecuado – Daniel

6

Sea prudente con este método, ya que seleccionar la fila de este modo es algo que Apple suggests against está haciendo para mostrar un estado "elegido".

En su lugar, considere establecer la propiedad accessoryType de la celda a algo así como UITableViewCellAccessoryCheckmark.

+0

Estoy tratando de replicar el uso de la UI de Apple cuando agrega/edite un evento en la aplicación Calendario y establezca una fecha/hora de inicio y finalización. Vi comentarios sobre la regla de la marca de verificación en otro lugar, pero no estoy seguro de si se aplicaría en este caso (la tabla se usa para diseñar componentes en lugar de presentar una lista de datos). – user119857

+0

Ese es un punto interesante.En este caso, no es necesario que tengan una subvista para cada uno de los Inicio y Fin, ya que ambos representan el mismo tipo de datos, modificados por el mismo tipo de UIPickerView. Entonces eso representaría un uso juicioso. Probablemente utilicen el método selectRowAtIndexPath de UITableView: animation: scrollPosition: method ... see http://tinyurl.com/yd9zs65 –

1

Sin duda cuidado. Estoy seguro de que tiene una buena razón, pero observe detenidamente el documento de las Directrices de Interfaz Humana que proporciona Apple. Las aplicaciones son rechazadas por no eliminar las filas de la tabla. Te animo a que encuentres la sección apropiada de HIG y veas que Apple ofrece sugerencias.

41
-(void)viewWillAppear:(BOOL)animated { 
    // assuming you had the table view wired to IBOutlet myTableView 
    // and that you wanted to select the first item in the first section 
    [myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
          animated:NO 
         scrollPosition:UITableViewScrollPositionTop]; 
} 

estoy usando esta técnica para seleccionar uno de los dos UITableViewCells por lo que los usuarios sabe qué celda un UIDatePicker por debajo de la vista de tabla que afectará. Esta técnica es utilizada por Apple en la aplicación de calendario cuando crea un nuevo evento y establece las fechas.

+1

1. esto no funciona para mí. 2. Apple dice que debe usar una marca de verificación para indicar el estado de selección de un artículo. –

3

Deberías ponerlo en viewWillAppear.

[myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
         animated:NO 
        scrollPosition:0]; 

Si intenta seleccionar en cellForRowAtIndexPath:, entonces no va a tomar el estilo requerido.

0

A veces, cuando no está en un UIViewController, no tiene viewWillAppear y, a veces, creó el UITableView mediante programación.

La solución fácil es poner en práctica este método delegate:

- (void)tableView:(UITableView *)tableView 
     willDisplayCell:(UITableViewCell *)cell 
     forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (self.selectedIndex == indexPath.row) { 
     cell.selected = YES; 
    } 
} 

Es que no funciona en la cellForRowAtIndexPath porque la célula aún no se visualiza. y se llama al método setSelected justo cuando este se muestra.

1

Usa este código para seleccionar la celda por defecto en la vista de tabla, indexPath puede ser varían de acuerdo a su necesidad

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
    [theTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 
}