0

在我的应用程序中,我使用四个 UITextView 自定义了 UITableView 单元。每当我将数据添加到 tableview 并重新加载它时。UITableViewCell 中的文本被之前的文本覆盖。

我尝试了不同的方法,但无法弄清楚问题所在。

我在视图控制器中使用 TableView。

这是我在表格视图单元格中使用的代码?

if ( [tableView isEqual:self.tableActions])
{
    //Setting the text empty

    static NSString *CellIdentifier = @"ActionsIdentifier";

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil)
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    }
    NSLog(@"Index Path %i",[indexPath row]);
    ActionDetails *actiondetails = [actionArray objectAtIndex:[indexPath row]];

    NSLog(@"Action Text %@",actiondetails.actions);

    //Actions
    actionText=[[UITextView alloc] initWithFrame:CGRectMake(10, 5, 230,30)];
    actionText.font = [UIFont systemFontOfSize:17.0];
    actionText.editable = NO;
    actionText.textColor=[UIColor blackColor];
    actionText.text = actiondetails.actions ; 
    actionText.userInteractionEnabled = NO;
    actionText.backgroundColor = [UIColor clearColor];
    [cell.contentView addSubview:actionText];


    //Owner         
    ownerBy=[[UITextView alloc] initWithFrame:CGRectMake(230, 5, 230,30)];
    ownerBy.font = [UIFont systemFontOfSize:17.0];
    ownerBy.textColor=[UIColor blackColor];
    ownerBy.textAlignment = UITextAlignmentCenter;
    ownerBy.text = actiondetails.owner;
    ownerBy.editable = NO;
    ownerBy.userInteractionEnabled = NO;
    ownerBy.backgroundColor = [UIColor clearColor];
    [cell.contentView addSubview:ownerBy];

 }

截屏 在此处输入图像描述

谢谢你们的帮助。

非常感激。

4

7 回答 7

2

前几天这发生在我身上,我想出的解决方案是在 if 语句中创建单元格后从单元格中删除所有子视图。

if(cell == nil)
{
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
}
if ([cell.contentView subviews]){
    for (UIView *subview in [cell.contentView subviews]) {
        [subview removeFromSuperview];
    }
}
于 2012-10-05T11:36:31.003 回答
1

删除 Tableview 的单元格标识符,否则将 Customcell 用于 Tableview..

于 2012-10-05T11:20:50.237 回答
1

只需简单尝试这种方式:

 {
        //Setting the text empty

        static NSString *CellIdentifier = @"ActionsIdentifier";

        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        **// if(cell == nil) // comment this line in your code ,its work 
       // {**
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
       **// }**
        NSLog(@"Index Path %i",[indexPath row]);
        ActionDetails *actiondetails = [actionArray objectAtIndex:[indexPath row]];

        NSLog(@"Action Text %@",actiondetails.actions);

        //Actions
        actionText=[[UITextView alloc] initWithFrame:CGRectMake(10, 5, 230,30)];
        actionText.font = [UIFont systemFontOfSize:17.0];
        actionText.editable = NO;
        actionText.textColor=[UIColor blackColor];
        actionText.text = actiondetails.actions ; 
        actionText.userInteractionEnabled = NO;
        actionText.backgroundColor = [UIColor clearColor];
        [cell.contentView addSubview:actionText];


        //Owner         
        ownerBy=[[UITextView alloc] initWithFrame:CGRectMake(230, 5, 230,30)];
        ownerBy.font = [UIFont systemFontOfSize:17.0];
        ownerBy.textColor=[UIColor blackColor];
        ownerBy.textAlignment = UITextAlignmentCenter;
        ownerBy.text = actiondetails.owner;
        ownerBy.editable = NO;
        ownerBy.userInteractionEnabled = NO;
        ownerBy.backgroundColor = [UIColor clearColor];
        [cell.contentView addSubview:ownerBy];

     }
于 2012-10-05T11:27:21.133 回答
1

您正在重复使用该单元格。重用的单元格已经添加了 UITextview。所以你正在覆盖它。您必须将创建和添加 UITextView 的所有代码转移到。

如果(细胞==无){

}

之后,您只需将 Text 设置为 UITextview。

于 2012-10-05T11:32:32.177 回答
0
for (id vw in [[cell contentView] subviews]) {
    if ([vw isKindOfClass:[UILabel class]])
    {
       UILabel *label = (UILabel *)vw;
       [label removeFromSuperview];
    }
 }

 for (id vw in [cell subviews]) {
     if ([vw isKindOfClass:[UILabel class]])
     {
        UILabel *label = (UILabel *)vw;
        [label removeFromSuperview];
     }
 }
于 2014-07-10T07:15:08.437 回答
0

当您的视图确实出现时,请重新加载您的表格视图。

-(void)viewDidAppear:(BOOL)animated {    
[tableView reloadData]; 
}
于 2012-10-05T11:33:24.963 回答
0

改变你的cellForRowAtIndexPath方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {

        NSString *CellIdentifier = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row];

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

           // your code 

        }

          // your code 

        return cell;    

    }
于 2012-10-05T11:40:48.173 回答