UITableView按日期排序

时间:2013-12-20 20:29:08

标签: ios objective-c sorting uitableview

我有一些图像保存在 ~Documents 中,我在一个自定义单元格的tableView中显示它们看起来像

my current tableView

如您所见,单元格具有 imageView,imageName标签,尺寸标签和日期标签(创建图像文件的日期)。现在,图像以随机顺序显示。我想按照它创建的日期(升序/降序)对它们进行排序

我该怎么办?

3 个答案:

答案 0 :(得分:4)

使用date属性在数组上使用NSSortDescriptor。像这样:

NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
arrayUsedForTableView = [arrayUsedForTableView sortedArrayUsingDescriptors:@[dateSortDescriptor]];

其中arrayUsedForTableView是您用作UITableViewDataSource模型的数组,date是该对象内NSDate属性的属性名称阵列。

然后在-reloadData上致电UITableView

编辑:

NSObject必须有一个id子类, 图像和日期NSArray内的@interface MyTableViewModelObject : NSObject @property (nonatomic) UIImage *image; @property (nonatomic) NSDate *date; @end 。头文件中的内容如下:

NSSortDescriptor

这是必要的,因为{{1}}正在寻找具有日期的对象,要根据日期属性进行排序,而不是日期。

答案 1 :(得分:1)

您可以使用以下代码从文档目录中按创建日期获取文件的排序数组files

NSMutableArray* files = [NSMutableArray new];
NSFileManager* fileManager = [NSFileManager defaultManager];
NSString* docDir =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSArray* content = [fileManager contentsOfDirectoryAtPath:docDir error:NULL];
for (NSString* file in content) {
    NSDictionary* attrs = [fileManager attributesOfItemAtPath:file error:nil];
    NSDate *date = nil;
    if (attrs) {
        date = (NSDate*)[attrs objectForKey: NSFileCreationDate];
    }

    [files addObject:@{@"path": file,@"createdon":(date ? date : [NSNull null])}];
}

[files sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSDictionary* fd1 = obj1;
    NSDictionary* fd2 = obj2;
    NSDate* dt1 = fd1[@"createdon"];
    NSDate* dt2 = fd2[@"createdon"];

    if (dt1 > dt2) {
        return NSOrderedAscending;
    }
    else if (dt1 < dt2) {
        return NSOrderedDescending;
    }
    else {
        return NSOrderedSame;
    }
}];

然后使用files数组作为UITableView的数据源非常简单。 显然,您可能需要修改代码以满足您的特定要求。

答案 2 :(得分:0)

正如其他响应者所暗示的那样:

您不对表格视图进行排序。表视图显示其数据源的内容。您几乎总是使用数组将数据存储在表视图中。

如果要对表视图中的项进行排序,请对用于填充表视图的数组进行排序,然后调用表视图的reloadData方法。这告诉表视图数据源的内容已经改变。

我偏向于新的NSMutableArray sortUsingSelector:方法系列。您可以通过提供一段代码来对可变数组进行排序,该代码块知道如何根据排序条件比较数组中的两个对象。在您的情况下,您可能有一个字典数组,其中每个字典包含图像文件名,NSDate和可能的文件大小。您将编写一个NSComparator块,它知道如何比较一对对象中的两个日期字段,系统可以对数组进行排序。