0

我有一个带有部分的表格视图。每个部分为一个月。所以我有六月,七月,八月的部分,......

我现在要做的是当 tableview 出现时,它会立即向下滚动到今天的月份。我有以下功能。

-(void)scrollToPosition{
  NSDate *now = [NSDate date];
    NSString *strDate = [[NSString alloc] initWithFormat:@"%@",now];
    NSArray *arr = [strDate componentsSeparatedByString:@" "];
    NSString *str;
    str = [arr objectAtIndex:0];
    NSLog(@"strdate: %@",str); // strdate: 2011-02-28

    NSArray *arr_my = [str componentsSeparatedByString:@"-"];

    NSInteger month = [[arr_my objectAtIndex:1] intValue];
    NSLog(@"month - 5 %d",month -5);

    NSIndexPath *path = [NSIndexPath indexPathForRow:1 inSection:month -5];
    NSLog(@"path = %@",path);
    [self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionMiddle animated:YES];

}

我做第 5 个月的原因是我的表格视图从六月开始。我的问题是,它向下滚动到该部分的最后一行而不是第一行。有谁能够帮助我?

亲切的问候,

编辑

My tableview looks likes this. 

---Section 1: June -----
    - row 1 (12-06-2012)
    - row 2 (14-06-2012)
    - row 3 (20-06-2012)
    - row 4 (22-06-2012)
---Section 2: July -----
    - row 1 (2-07-2012)
    - row 2 (14-07-2012)
    - row 3 (21-07-2012)
    - row 4 (27-07-2012)
---Section 3: August -----
    - row 1 (2-08-2012)
    - row 2 (14-08-2012)
---Section 4: September -----
    - row 1 (17-09-2012)
---Section 5: Oktober -----
    - row 1
    - row 2
    - row 3
    - row 4
---Section 6: November -----
    - row 1
    - row 2
    - row 3
    - row 4
---Section 7: December -----
    - row 1
    - row 2
    - row 3
---Section 8: January -----
    - row 1
    - row 2

编辑:截图

在这里,您可以看到滚动后我的表格视图的屏幕截图。截屏

4

1 回答 1

0

问题是,节索引从0而不是1开始。

因此,当您返回的月份为6时,您的电话:

NSIndexPath *path = [NSIndexPath indexPathForRow:1 inSection:1]; // month - 5 = 1
[self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionMiddle animated:YES];

但你应该打电话:

NSIndexPath *path = [NSIndexPath indexPathForRow:1 inSection:0];

因此,您滚动到您实际想要滚动到的部分下方1 的部分。这就是为什么它看起来好像会滚动到上一节的最后一行。

替换month - 5month - 6,它应该可以按您的意愿工作。

顺便说一句,我建议修改您的代码以检索当前月份,如下所示:

NSDate *now = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM"];
int month = [[dateFormatter stringFromDate:now] intValue];
//...
于 2012-11-02T11:09:26.930 回答