在我的iPhone应用程序中......
在表格视图中,我删除了行...
更新我正在喂食桌子的阵列......
重新加载到数据行......
X
是,但删除的数据是正确的..
索引路径行的单元格....
我刚刚在行中添加了一个标签...... 删除行
我只是从数组中删除数据
并更新行数(递减)......
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
//Get the Log Id for the sections. From Section Array
int logID=0;
if(indexPath.row==0)
{
NSLog(@"Time Array %@",timeArray);
logID=[[[sectionArray objectAtIndex:indexPath.section] valueForKey:@"logID"] intValue];
NSPredicate *p=[NSPredicate predicateWithFormat:@"logID==%d",logID];
fillRows=nil;
fillRows= [[timeArray filteredArrayUsingPredicate:p] mutableCopy];
}
//Show Current Time.
//"If condition for not to go for Array Index Out of Bound".
if(indexPath.row<[fillRows count])
{
//Log CurrentTime
cell.textLabel.text=[[fillRows objectAtIndex:indexPath.row] valueForKey:@"logCurrentTime"];
//Log Duration.
UILabel *lblDuration=[[[UILabel alloc] initWithFrame:CGRectMake(110, 11, 60, 21)] autorelease] ;
lblDuration.text=[[fillRows objectAtIndex:indexPath.row] valueForKey:@"logDuration"];
[cell.contentView addSubview:lblDuration];
}
return cell;
}
编辑::重叠标签的问题已被彻底解决。 因为现在标签没有重叠但是 当我删除任何行时,那些行的标签保持不变 ---&GT;最后一行未显示在表格中。
答案 0 :(得分:1)
问题是每次绘制单元格时都会向单元格添加新标签。
尝试将以下代码移到if (cell == nil) {..} block
UILabel *lblDuration=[[[UILabel alloc] initWithFrame:CGRectMake(110, 11, 60, 21)] autorelease] ;
[cell.contentView addSubview:lblDuration];
答案 1 :(得分:1)
这是因为dequeueReusableCellWithIdentifier
会返回您之前调用cellForRow...
委托创建的未使用的单元格。如果要向单元格添加标签,则应在单元格init
之后执行此操作并包含标签的标记,以便稍后在单元格中找到标签。代码应该类似于
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *lblDuration= [cell.contentView viewWithTag:1];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
lblDuration=[[[UILabel alloc] initWithFrame:CGRectMake(110, 11, 60, 21)] autorelease] ;
lblDuration.tag = 1;
[cell.contentView addSubview:lblDuration];
}
//Get the Log Id for the sections. From Section Array
int logID=0;
if(indexPath.row==0)
{
NSLog(@"Time Array %@",timeArray);
logID=[[[sectionArray objectAtIndex:indexPath.section] valueForKey:@"logID"] intValue];
NSPredicate *p=[NSPredicate predicateWithFormat:@"logID==%d",logID];
fillRows=nil;
fillRows= [[timeArray filteredArrayUsingPredicate:p] mutableCopy];
}
// Show Current Time.
//"If condition for not to go for Array Index Out of Bound".
if(indexPath.row<[fillRows count])
{
//Log CurrentTime
cell.textLabel.text=[[fillRows objectAtIndex:indexPath.row] valueForKey:@"logCurrentTime"];
//Log Duration.
lblDuration.text=[[fillRows objectAtIndex:indexPath.row] valueForKey:@"logDuration"];
}
return cell;
}
很抱歉,我没有尝试编译它,但它应该可以工作。
答案 2 :(得分:0)
当您删除该行时...您还必须删除您在该单元格中添加的UILabel
...您必须明确处理UILabel
...因为您有在单元格上创建了一个新视图...
所以只要处理单元格删除行方法,如果你使用它删除....并在该方法中也删除UILabel
...或只使用[tableView reload]
数据..这将自动这样做....
快乐编码.. :)