2012-03-29 14 views
5

¿Cómo hago esta tarea? Básicamente, tendré una matriz de "segundos int" enumerada dentro de UITableView. Entonces, ¿cómo puedo asignar cada "segundos int" a la cuenta regresiva a cero? Los posibles problemas que estoy viendo son los temporizadores que no se actualizan cuando la célula aún no se ha creado. ¿Y cómo instanciar varios NSTimers independientes actualizando diferentes elementos de la interfaz de usuario? Estoy perdido aquí, por lo que cualquier sugerencia es muy apreciada. a efectos visuales, quiero tener algo como esto:temporizadores de cuenta atrás múltiples dentro de uitableview

enter image description here

Respuesta

8

De la imagen, parece que su modelo es un conjunto de acciones que el usuario planea tomar. Me gustaría organizar las cosas de esta manera:

1) MyAction es un NSObject con un nombre y una fecha de vencimiento. MyAction implementa algo como esto:

- (NSString *)timeRemainingString { 
    NSDate *now = [NSDate date]; 
    NSTimeInterval secondsLeft = [self.dueDate timeIntervalSinceDate:now]; 
    // divide by 60, 3600, etc to make a pretty string with colons 
    // just to get things going, for now, do something simple 
    NSString *answer = [NSString stringWithFormat:@"seconds left = %f", secondsLeft]; 
    return answer; 
} 

2) StatusViewController mantiene un identificador para el modelo que es un NSArray de MyActions, sino que también tiene un NSTimer (sólo uno) que dice que el tiempo pasa.

// schedule timer on viewDidAppear 
// invalidate on viewWillDisappear 

- (void)timerFired:(NSTimer *)timer { 
    [self.tableView reloadData]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return self.model.count; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    MyAction *myAction = [self.model objectAtIndex:indexPath.row]; 

    // this can be a custom cell. to get it working at first, 
    // maybe start with the default properties of a UITableViewCell 

    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    cell.textLabel.text = [myAction timeRemainingString]; 
    cell.detailTextLabel.text = [myAction name]; 
} 
+0

gracias amigo! ¿Cómo se actualizará esta etiqueta (cell.textLabel.text = [myAction timeRemainingString];) cada tic? ¿Cómo lo llamas cada segundo? – Diffy

+0

np. configurará su controlador de vista para que sea el "delegado" y el "origen de datos" de la tabla (debería haberlo mencionado). cuando se producen los tics, pides a tu mesa que vuelva a cargar sus datos. la mesa se ocupa del resto. lo llama para preguntar cuántas celdas debe cargar y para configurar cada celda, ambos métodos descritos en el código que proporcioné. – danh

+0

bien, lo conseguí trabajando ... ahora estoy tratando de cambiar su - (NSString *) método timeRemainingString a - (NSString *) timeRemainingString: (NSTimeInterval) secondsRemaining para poder pasar mi matriz de segundos en lugar de un valor fijo. ¿Cómo guardo una referencia de ese valor por lo que deducirá 1 segundo cada vez que se vuelva a cargar la tabla? – Diffy

0

Tener cosas interfaz de usuario de fantasía en la mesa de esa manera, es posible que desee subclase UITableViewCell y crear un temporizador como una propiedad de cada uno. La célula puede tener un delegado que responda a TimerWentOff y maneje el timbre de una alarma o notificación o cualquier otra cosa. Cada temporizador actualizaría la etiqueta en su celda.

Espero que ayude un poco. Si tiene preguntas más específicas, hágamelo saber.

+0

Gracias! Crear la celda personalizada no es un problema, ya lo tengo. Entonces, esta parte "¿La célula puede tener un delegado?" ¿Esta es la parte que crea el temporizador de cuenta regresiva? ¿Debería poner los nstimers en una matriz y acceder a un método para actualizar las etiquetas en mi celda? – Diffy

Cuestiones relacionadas