ScrollToPosition总是滚动到我的部分的最后一行

时间:2012-11-02 09:38:43

标签: objective-c ios uitableview scroll

我有一个分段的桌面视图。每个部分都是一个月。所以我的部分是6月,7月,8月......

我现在要做的是当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];

}

month-5 的原因是我的桌面视图从6月份开始。我的问题是,它向下滚动到该部分的最后一行而不是第一行。有人能帮助我吗?

亲切的问候,

修改

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

编辑:截图

在这里,您可以看到滚动后我的tableview的外观截图。 Screenshot

1 个答案:

答案 0 :(得分: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 - 5替换为month - 6,它应该可以正常使用。

顺便提一下,我建议修改你的代码以检索当前月份:

NSDate *now = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM"];
int month = [[dateFormatter stringFromDate:now] intValue];
//...