2010-08-21 11 views
0

J'ai essayé cela de plusieurs façons, mais échoué systématiquement, j'espère que vous pouvez m'aider à réaliser ce que je veux faire.Utilisation de NSDate pour obtenir des dates

Je fais une application iPad, j'aurai cinq tables dans une seule vue et chaque table aura une date comme en-tête/titre dans ce format, par exemple. Lundi 20

Ces cinq tables seront du lundi au vendredi. C'est le peu que je ne peux pas faire. Je veux travailler sur la date actuelle et mettre en évidence le tableau qui est aujourd'hui, évidemment change tous les jours. Par exemple, disons que c'est aujourd'hui jeudi 9 septembre. La table du jeudi est mise en surbrillance, puis elle définit automatiquement la date des autres tables autour du jeudi. Pensez à un calendrier scolaire/planificateur/journal intime. Du lundi au vendredi, chacun étiqueté avec leurs dates.

EDIT: Et si je le faisais comme ça? Si je l'ajoute dans le code que vous m'avez donné, si TRUE (bouton enfoncé) ajouter sept jours, fait comme dans l'exemple de formulaire Apple. Quelque soit mon problème, qu'est ce que grégorien? Qu'est-ce que je remplace avec? Je l'ai vu utilisé beaucoup sur des échantillons de calendrier d'Apple.

if (tableView == monTable){ 
     if(next == TRUE){ 
      [comps setDay:7]; 
      NSDate *date = [gregorian dateByAddingComponents:comps toDate:curDate options:0]; 
     } 
     else{ 
      [comps setWeekday:2]; 
     } 
    } 

Répondre

3

Vous pouvez obtenir du lundi au vendredi dates de cette façon:

NSDate* curDate = [NSDate date]; // Get current date 
NSCalendar* calendar = [NSCalendar currentCalendar];// Init calendar 
NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // Get necessary date components 

    // Week days change from 1 to 7, Sunday is the 1st, Saturday - the last one. 
for (int i = 2; i <= 6; i++){ 
    [comps setWeekday:i]; 
    NSDate *tDate = [calendar dateFromComponents:comps]; 
    NSLog(@"%@", tDate); 
} 

Pour déterminer quelle date pour mettre en surbrillance (date actuelle), vous avez juste besoin de vérifier la composante de la semaine de la date.

Edit: méthode titleForHeaderInSection peut ressembler à:

- (NSString*) tableView:(UITableView *)tableView titleForHeaderInSection:(int)section{ 
    NSDate* curDate = [NSDate date]; // Get current date 
    NSCalendar* calendar = [NSCalendar currentCalendar];// Init calendar 
    NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // Get necessary date components 

    // Week days change from 1 to 7, Sunday is the 1st, Saturday - the last one. 
    if (tableView == monTable) 
     [comps setWeekday:2]; 
    if (tableView == tueTable) 
     [comps setWeekday:3]; 
    if (tableView == wedTable) 
     [comps setWeekday:4]; 
    if (tableView == thuTable) 
     [comps setWeekday:5]; 
    if (tableView == friTable) 
     [comps setWeekday:6]; 

    NSDate *tDate = [calendar dateFromComponents:comps]; 
    NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [formatter setDateFormat:@"EEE, MMM d"]; 


    return [formatter stringFromDate:tDate]; 
} 
+0

Ahh ok, mais si je suis en utilisant le code fourni dans titleForHeaderInSection, comment puis-je le faire passer par chaque table et lui donner la bonne date? Par exemple, j'ai monTable, tueTable, wedTable etc. Mais comment puis-je l'obtenir pour assigner la bonne date à la bonne table? –

+0

par exemple vous pouvez définir la propriété tag à vos tables (par exemple, de 1 à cinq) et définir le jour de la semaine comme suit: [comps setWeekday: 1 + table.tag] ;, ou simplement 'it (table == monTable) [comps setWeekday : 2]; etc pour chaque table. – Vladimir

+0

Hmm, merci pour l'aide, tout est logique, mais mon application se bloque lorsque j'ajoute ces instructions if. J'ai mis votre code dans le titleForHeaderInSection et ajouté ces instructions dans la boucle for. f (tableView == monTable) [comps setWeekday: 2]; \t \t si (tableView == tueTable) [comps setWeekday: 3]; \t \t si (tableView == wedTable) [comps setWeekday: 4]; \t \t si (tableView == thuTable) [comps setWeekday: 5]; \t \t si (tableView == friTable) [comps setWeekday: 6]; De même, n'aurais-je pas besoin de 'renvoyer' ces instructions if? Si j'essaie de faire cela, cela me cause une erreur. –