UITableView滚动到最接近今天的日期的部分

史提芬

我有一个tableview带有日历的约会。每天都是分开的section你可以在这里看到我的意思

在此处输入图片说明

现在,我希望tableview滚动到section今天滚动条,或者如果section今天没有滚动到最接近滚动条

我知道我应该使用以下代码:

 [tableView scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

现在,我有一个NSMutableDictionary包含我每天排序的约会。您可以看到以下功能:

-(NSDictionary *)sortKalendar:(NSMutableArray *)appointments{
    NSMutableDictionary *buffer = [[NSMutableDictionary alloc] init];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd-MM-yyyy"];

    for (int i = 0; i < appointments.count; i++) {
        Appointment *object = [appointments objectAtIndex:i];
        NSString *date = [formatter stringFromDate:object.app_start];
        if(!(date == NULL) ){
            NSLog(@"date is %@",date);
            if ([buffer objectForKey:date]) {
                [(NSMutableArray *)[buffer objectForKey:date] addObject:object];
            } else {
                NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithObjects:object, nil];
                [buffer setObject:mutableArray forKey:date];
            }
        }


    }
    NSDictionary *result = [NSDictionary dictionaryWithDictionary:buffer];

    return result;
}

我的问题是,现在如何找到正确的NSIndexpath

提前致谢 !

编辑

目前,我正在使用以下内容。但是仍然有些不对劲。

NSArray *keys = [dictAppointments allKeys];

NSLog(@"KEYS ARE %@",keys)  ;
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy"];

NSArray *sortedArray = [keys sortedArrayUsingComparator:^(id obj1, id obj2) {
    NSDate *date1 = [formatter dateFromString:obj1];
    NSDate *date2 = [formatter dateFromString:obj2];

    NSNumber *interval1 = [NSNumber numberWithDouble:[date1 timeIntervalSinceNow]];
    NSNumber *interval2 = [NSNumber numberWithDouble:[date2 timeIntervalSinceNow]];
    return (NSComparisonResult)[interval1 compare:interval2];
}];
NSLog(@"Sorted Array %@",sortedArray);
NSString *closestDateString = [sortedArray objectAtIndex:0];
NSLog(@"Closest date string is %@",closestDateString);
int section = [keys indexOfObject:closestDateString];
NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:0 inSection:section];
[tableView scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

这给了我以下日志:

2014-01-07 13:28:42.420 Adsolut[9579:60b] KEYS ARE (
    "03-12-2013",
    "20-12-2013",
    "17-12-2013",
    "05-01-2014",
    "21-12-2013",
    "31-12-2013",
    "04-01-2014",
    "06-01-2014",
    "16-01-2014",
    "29-12-2013",
    "03-01-2014",
    "11-01-2014",
    "18-12-2013",
    "31-01-2014"
)
2014-01-07 13:28:42.437 Adsolut[9579:60b] Sorted Array (
    "03-12-2013",
    "17-12-2013",
    "18-12-2013",
    "20-12-2013",
    "21-12-2013",
    "29-12-2013",
    "31-12-2013",
    "03-01-2014",
    "04-01-2014",
    "05-01-2014",
    "06-01-2014",
    "11-01-2014",
    "16-01-2014",
    "31-01-2014"
)
阿努莎·科蒂亚尔(Anusha Kottiyal)

您可以使用约会日期和当前日期之间的时间间隔对数组进行排序,

NSArray *keys = [yourDictionary allKeys];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy"];

NSArray *sortedArray = [keys sortedArrayUsingComparator:^(id obj1, id obj2) {
    NSDate *date1 = [formatter dateFromString:obj1];
    NSDate *date2 = [formatter dateFromString:obj2];

    NSNumber *interval1 = [NSNumber numberWithDouble:abs([date1 timeIntervalSinceNow])];
    NSNumber *interval2 = [NSNumber numberWithDouble:abs([date2 timeIntervalSinceNow])];
    return (NSComparisonResult)[interval1 compare:interval2];
}];

最接近的日期

NSString *closestDateString = [sortedArray objectAtIndex:0];

然后,

int section = [keys indexOfObject:closestDateString];
NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:0 inSection:section];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

UITableView滚动到底部

来自分类Dev

UITableView部分索引无法滚动到搜索栏索引

来自分类Dev

UITableView使用UIPIckerView滚动到特定部分吗?

来自分类Dev

查找最接近的日期(javascript)

来自分类Dev

在日期时间列表中查找最接近的日期

来自分类Dev

获取最接近sysdate的日期

来自分类Dev

SQL语句匹配最接近的日期?

来自分类Dev

从列表中获取最接近的日期时间

来自分类Dev

如果日期等于某个日期,则查找最接近的值

来自分类Dev

检查哪个日期最接近今天

来自分类Dev

在日期列表中查找最接近的过去日期

来自分类Dev

SQL按日期获取最接近的值

来自分类Dev

如何显示最接近所选日期的日期

来自分类Dev

滚动到(.js)部分的顶部

来自分类Dev

UITableView滚动到部分

来自分类Dev

UITableView滚动到最接近今天的日期的部分

来自分类Dev

用JavaScript最接近的日期和时间

来自分类Dev

查找最接近的日期(javascript)

来自分类Dev

PostgreSQL返回精确或最接近查询日期的日期

来自分类Dev

Laravel在最接近今天的前端显示日期

来自分类Dev

在输入日期之前的列表中查找最接近的日期

来自分类Dev

UITableView可滚动到UIVIewController

来自分类Dev

检查哪个日期最接近今天

来自分类Dev

无法从数据库日期中找到与今天最接近的日期

来自分类Dev

在以下位置之间自动滚动到最接近的锚点

来自分类Dev

与最接近的日期相对应的查找值

来自分类Dev

array_multisort 按最接近今天日期的值排序

来自分类Dev

链接并滚动到部分

来自分类Dev

日期和时间最接近匹配excel