2011-08-23 3 views
1

OK ... 그래서 UITableView를 사용하려고하고 52 섹션으로 분할했습니다 .. 1 년에 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

일년에 52 주를 보내고 있습니까? –

답변

2

코드에서 switch 문을 사용하기로 결정한 이유는 확실하지 않지만 목적이 전혀 없으며 적어도 일부 문제를 일으키고 있습니다. 3 주를 제외하고 (switch 문에서 다루는 3 가지 경우) titleForHeaderSection : 메서드는 nil을 반환합니다. 난 당신이 그 주 첫 날의 날짜를 얻을하려고 생각하기 때문에 나는 하루 이상이 아닌 평일을 설정

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

참고 : 대신, 당신은 이런 식으로 뭔가를 시도해야합니다.

+0

완벽하게 작동합니다. 고마워, 너 내가 얼마나 도움을 주는지 잘 모르겠다. 나는 그 일에 며칠을 보냈다. 또한 마음에 들지 않는다면 각 행에 해당 월의 일 수를 기입하는 가장 좋은 방법은 무엇이라고 생각하십니까? 예를 들어 섹션 0은 22 번째, 23 번째, 24 번째, 25 번째, 26 번째, 27 번째, 28 번째 섹션이며 다음 섹션은 29 번째부터 계속됩니다. 매주 7 일 동안 모든 주와 함께 plist를 만들어야합니까? – Chris

+0

NSIndexPath는 섹션 번호와 행 번호를 제공하기 때문에 위의 코드를'tableView : cellForRowAtIndexPath :'메소드에 추가 할 수 있습니다. 또는'viewDidLoad :'에서 섹션 헤더와 행 제목에 대한 계산을 수행하고이를 두 개의 NSArray에 저장하고'titleForHeaderInSection :'및'cellForRowAtIndexPath :'메소드에서 그 값을 간단히 가져올 수 있습니다. – glorifiedHacker

+0

다시 한번 감사드립니다. 약간의 조작이 필요했지만 훌륭하게 작동합니다. – Chris

관련 문제