gpt4 book ai didi

ios - TableView 日期部分标题

转载 作者:行者123 更新时间:2023-11-28 20:34:03 25 4
gpt4 key购买 nike

我的应用程序就像一本日志。我保留了一天中发生的事件的证据。基本上,我有一个带有“日期”属性的实体(显示在 TableView 上)。当我保存新事件时,会使用 [NSDate date] 存储当前日期。我如何组织表格 View ,以便所有事件都按天排序并显示?任何提示将不胜感激!

最佳答案

您应该使用 NSFetchedResultsControllersectionNameKeyPath 参数按日期划分结果。

几个例子herehere .

您基本上将要使用的属性设置为 sectionNameKeyPath 参数,如下所示:

fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"date"
cacheName:nil];

然后您的数据源委托(delegate)代码将如下所示:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [[fetchedResultsController sections] count];
}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return [fetchedResultsController sectionIndexTitles];
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}

编辑:为了仅按天对项目进行分组,您需要为托管对象创建一个 transient 属性 - 本质上是一个从实际日期派生的日期字符串。

这些像往常一样放在 .h/.m 的顶部

@property (nonatomic, strong) NSString *sectionTitle;

@synthesize sectionTitle;

现在您已经创建了该属性,您想要覆盖其访问器以在请求时实际设置标题。

-(NSString *)sectionTitle
{
[self willAccessValueForKey:@"date"];
NSString *temp = sectionTitle;
[self didAccessValueForKey:@"date"];

if(!temp)
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"d MMMM yyyy"]; // format your section titles however you want
temp = [formatter stringFromDate:date];
sectionTitle = temp;
}
return temp;
}

请注意,此代码实际上会检查 sectionTitle 是否已被缓存,并且只是重新使用它而不重新创建它。如果您期望或允许更改过去对象的日期,则还需要更新 sectionTitle,如果是这种情况,您还需要覆盖日期本身的更改器,并添加一行以清除sectionTitle(以便下次请求标题时,将重新创建)。

- (void)setDate:(NSDate *)newDate {

// If the date changes, the cached section identifier becomes invalid.
[self willChangeValueForKey:@"date"];
[self setPrimitiveTimeStamp:newDate];
[self didChangeValueForKey:@"date"];

[self setSectionTitle:nil];
}

最后,您应该将 fetchedResultsControllersectionNameKeyPath 更改为 @"sectionTitle"

Apple 有一个 sample project如果你想看到类似的东西,你可以看看。

关于ios - TableView 日期部分标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com