我有一个 UITableView
,它根据标签内的许多因素显示动态信息。这些标签又是用作可重用单元格的自定义 UITableViewCell
的属性。除了一个讨厌的标签 self.thisCustomCell.fromDateLabel
之外,一切似乎都运行良好。
此标签应反射(reflect)特定事件的时间间隔是否与选定搜索时间范围的开始时间重叠。如果是这样,标签应显示为“提前开始”。如果不是,则标签应读取相关事件的实际 startTime
。实际上,在一般情况下,按时间顺序排列最旧(最底部)的标签应该总是说“STARTED EARLIER”。
但是,这个标签的行为是不稳定的,无论它是在最旧的单元格还是另一个单元格中。这意味着最旧的单元格(其持续时间应始终与时间范围的开始时间重叠)通常会给出 startTime
,而其他单元格,它们应该从不显示“STARTED EARLIER” , 有时会。
这里有几个截图来说明这个问题:
顺序是按时间顺序降序排列的,并且第一个镜头中最底部的单元格跨越了时间范围的开始时间,因此右下角的标签应该显示为“较早开始”。
在这张照片中,您可以看到其他单元格中的标签确实显示为“提前开始”,尽管它不应该显示。
这是我认为相关的代码:
-(void) updateOtherLabels
{
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat: @"MM/dd/yy hh:mm a"];
if ((thisActivity.startTime < self.detailStartDate) && (thisActivity.stopTime > self.detailStartDate))
{
self.thisCustomCell.fromDateLabel.text = @"STARTED EARLIER";
NSLog(@"FromDateLabel text is %@",self.thisCustomCell.fromDateLabel.text);
NSLog(@"self.detailStartDate is %@",[dateFormat stringFromDate:thisActivity.startTime]);
}
else
{
self.thisCustomCell.fromDateLabel.text = [dateFormat stringFromDate:thisActivity.startTime];
}
if (thisActivity.stopTime == NULL)
{
self.thisCustomCell.toDateLabel.text = @"RUNNING";
}
else
{
self.thisCustomCell.toDateLabel.text = [dateFormat stringFromDate:thisActivity.stopTime];
}
}
有人可以指出我做错了什么吗?对谷歌和 SO 的广泛搜索没有发现任何似乎适用的东西。我可以提供任何可能相关的附加代码。
感谢观看!非常感谢所有帮助!
已修复,感谢@rdelmar:
我将上面代码中的 if 语句替换为:
if (([thisActivity.startTime timeIntervalSinceDate:self.detailStartDate] < 0) && ([thisActivity.stopTime timeIntervalSinceDate:self.detailStartDate] > 0))
最佳答案
你不能用“<”来比较日期,那实际上是在比较指向这些日期的指针,而不是日期本身。您可以使用 NSDate 类引用中列出的日期比较方法之一,也可以使用 timeIntervalSince1970 (或其他 timeIntervalSince... 方法之一)将日期转换为基元,然后使用“<”。
if (([thisActivity.startTime timeIntervalSince1970] < [self.detailStartDate timeIntervalSince1970] ) && ([thisActivity.stopTime timeIntervalSince1970] > [self.detailStartDate timeIntervalSince1970]))
关于ios - 自定义 uitableviewcell 中看似随机的标签文本更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24052086/