我有一个UICollectionViewCell
,UILabel
显示两个日期之间的日差异。我想每秒更新一次。我已尝试使用NSTimer
重新加载UICollectionview
的数据,但它会使用户界面非常慢。
我如何实现这一目标? 感谢。
答案 0 :(得分:1)
您不会仅仅为了更新标签而重新加载整个CollectionView甚至单个单元格。
您有两个选择:
触发计时器后,通过以下方法获取可见单元格,只获取显示时间的标签。
let visibleIndexPaths = tableview.indexPathsForVisibleRows
var visibleCellsArray: [UITableViewCell] = []
for currentIndextPath in visibleIndexPaths! {
// You now have visible cells in visibleCellsArray
visibleCellsArray.append(tableview.cellForRowAtIndexPath(currentIndextPath)!)
}
答案 1 :(得分:0)
首先你设置为CollectionView hader并声明一个hader标签和标签设置为global,这样它很容易使用。
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
if (kind == UICollectionElementKindSectionHeader) {
Like = indexPath;
UICollectionReusableView *reusableview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header" forIndexPath:indexPath];
if (reusableview==nil) {
reusableview=[[UICollectionReusableView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
}
for (UILabel *lbl in reusableview.subviews)
{
if ([lbl isKindOfClass:[UILabel class]])
{
[lbl removeFromSuperview];
}
}
label2=[[UILabel alloc] initWithFrame:CGRectMake(label.frame.size.width + 40, 0, 140, 50)];
[reusableview removeFromSuperview];
label2.text= [NSString stringWithFormat:@"END %@",[self testDateComaparFunc:[[DealArr valueForKey:@"end_time"] objectAtIndex:indexPath.section]]];
label2.textColor = [UIColor whiteColor];
[reusableview addSubview:label2];
return reusableview;
}
return nil;
}
现在在viewWillAppear中设置计时器
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(runMethod) userInfo:nil repeats:YES];
}
将“定时器方法”设置为与“标签文本”中使用的相同
-(void)runMethod
{
label2.text= [NSString stringWithFormat:@"END %@",[self testDateComaparFunc:[[DealArr valueForKey:@"end_time"] objectAtIndex:Like.section]]];
NSLog(@"i'm calling");
}
我希望它对你有所帮助,因为它非常适合我,所以希望和你一样工作。