Получить дату от номера недели с номером заголовка раздела, являющимся неделей - PullRequest
1 голос
/ 23 августа 2011

ОК ... так что я пытаюсь использовать UITableView и разделить его на 52 раздела ... по 52 недели в году ... у каждого раздела есть 7 дней (ячеек) на неделю. Я хочу, чтобы каждый заголовок раздела говорил «Неделя месяца, года». Каждый раз, когда я пытаюсь получить строку для печати в headerSection соответствующей недели, ничего не появляется. Есть ли способ использовать номер раздела заголовка, чтобы установить первый день этой недели в sectionHeader? ниже приведен код, который я пытался заставить работать ... Кажется, что это имеет смысл. Но я делаю что-то не так. Я был бы очень признателен за любую помощь. Заранее спасибо.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    NSDate *now = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *comp = [gregorian components:NSYearCalendarUnit fromDate:now];
    [comp setWeek:section];
    [comp setDay:1];
    NSDate *resultDate = [gregorian dateFromComponents:comp];
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"EEE, MMM d, ''yy"];

    NSString *myDateString = [formatter stringFromDate:resultDate];

    NSString *sectionHeader = nil;

    switch (section) {
    case 0:
        sectionHeader = myDateString;
        break;
    case 1: 
        sectionHeader = myDateString;
        break;
    case 2:
        sectionHeader = myDateString;
        break;
    default:
        break;
    }   

    return sectionHeader;
}

1 Ответ

2 голосов
/ 23 августа 2011

Я не уверен, почему вы решили использовать оператор switch в вашем коде, но он абсолютно бесполезен и вызывает по крайней мере некоторые из ваших проблем. В течение всех трех недель (три случая, описанные в вашем операторе switch) ваш метод titleForHeaderSection: будет возвращать ноль. Вместо этого вы должны попробовать что-то вроде этого:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    NSDate *now = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *comp = [gregorian components:NSYearCalendarUnit fromDate:now];

    [comp setWeek:(section + 1)]; // section numbers start at 0, so need to add 1
    [comp setWeekDay:1]; // Note that this is very different than setting day to 1

    NSDate *resultDate = [gregorian dateFromComponents:comp];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"MMM d, yyyy"];

    NSString *myDateString = [formatter stringFromDate:resultDate];

    [gregorian release]; // Clean up allocated objects by releasing them
    [formatter release];

    return [NSString stringWithFormat:@"Week of %@", myDateString];
}

Обратите внимание, что я установил день недели выше, а не день, поскольку я считаю, что вы пытаетесь получить дату первого дня этой недели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...