我有一个表视图,行数据显示基于用户设置。 就像我有任务,开始日期,优先级,过程,状态,描述等复选框。
我用户检查任务和描述然后我创建UITableViewCell
然后为任务和描述添加标签如果用户选中所有设置,则单元格应该显示所有创建的标签。
我面临的问题是UITableView
没有平滑地滚动,当用户在加载设置后第二次滚动它时,它不会重复使用单元格。
以下是代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellMainNibID = @"cellMain";
NSUInteger count=[arrSettings count];
TaskItem* item=[self.arrTaskList objectAtIndex:indexPath.row];
CGFloat y=2;
UITableViewCell* cell=(UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellMainNibID];
if (_cellMain == nil)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellMainNibID];
for (int i=0; i<count; i++)
{
UILabel *lbll=(UILabel*)[cell.contentView viewWithTag:indexPath.row+ i+200];
NSLog(@" cell label = %@",lbll); //**Return null always**
UILabel* lbl=[[UILabel alloc]initWithFrame:CGRectMake(10, y, 310, 14)];
lbl.tag=indexPath.row+ i+200;
lbl.backgroundColor=[UIColor clearColor];
lbl.textColor=[UIColor whiteColor];
lbl.font=[UIFont boldSystemFontOfSize:14];
[cell.contentView addSubview:lbl];
lbl=nil;
NSString* str=[arrSettings objectAtIndex:i];
CGRect rect;
if ([str isEqualToString:@"description"])
rect=CGRectMake(8, y+14, 290, 50);
else
rect=CGRectMake(110, y, 290, 14);
UILabel *lblll=(UILabel*)[cell.contentView viewWithTag:indexPath.row+ i+400];
NSLog(@" cell label = %@",lblll); //**Return null always**
UILabel* lbl2=[[UILabel alloc]initWithFrame:rect];
lbl2.backgroundColor=[UIColor clearColor];
lbl2.tag=indexPath.row+i+400;
lbl2.textColor=[UIColor whiteColor];
lbl2.font=[UIFont systemFontOfSize:14];
lbl2.numberOfLines=5;
lbl2.lineBreakMode=NSLineBreakByCharWrapping;
[cell.contentView addSubview:lbl2];
y+=lbl2.frame.size.height+1;
lbl2=nil;
}
}
for (int i=0; i<count; i++)
{
UILabel* lbl=(UILabel*)[cell.contentView viewWithTag:indexPath.row+i+200];
lbl.text=[[[arrSettings objectAtIndex:i]uppercaseString]stringByAppendingString:@":"];
UILabel* lbl2=(UILabel*)[cell.contentView viewWithTag:indexPath.row+i+400];
lbl2.text=[item valueForKey:[arrSettings objectAtIndex:i]];
}
cell.contentView.backgroundColor=[UIColor clearColor];
cell.backgroundColor=[UIColor clearColor];
_cellMain.contentView.backgroundColor=[UIColor clearColor];
_cellMain.backgroundColor=[UIColor clearColor];
UIButton *btnCheck=[UIButton buttonWithType:UIButtonTypeCustom];
btnCheck.tag=indexPath.row+300;
if ([arrSelectedRow containsObject:[NSNumber numberWithLong:btnCheck.tag-300]])
{
[btnCheck setImage:[UIImage imageNamed:@"cb_glossy_on@2x.png"] forState:UIControlStateNormal];
}
else
{
[btnCheck setImage:[UIImage imageNamed:@"cb_glossy_off@2x.png"] forState:UIControlStateNormal];
}
btnCheck.frame=CGRectMake(295, cell.center.y-22, 33, 33);
[btnCheck addTarget:self action:@selector(checkClicked:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView=btnCheck;
btnCheck=nil;
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger count=[arrSettings count];
CGFloat totalHeight=(16*count)+(count*2);
if (isDesc)
totalHeight+=60;
return totalHeight;
}
根据UITableView
标签的用户设置,有人可以建议我如何在UITableViewCell
中显示动态数据吗?
答案 0 :(得分:1)
变化:
if (_cellMain == nil)
到
if (cell == nil)
答案 1 :(得分:1)
在UITableView的cellForRowAtIndex方法中添加以下代码
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
答案 2 :(得分:0)
我没有平滑的tableView滚动问题。在我的情况下,原因在于我忘记实现tableView方法tableView: registerNib: forCellReuseIdentifier:
(在该项目中我使用.xib来创建单元格)。
[self.tableView registerNib:[UINib nibWithNibName:@"YourTableViewCell" bundle:nil] forCellReuseIdentifier:YourCellReuseIdentifier];