omgbbqhax
omgbbqhax

Reputation: 441

UITableview overwriting on olddata

hi im creating chat example and if user add send button adding new object in my arrray and reload data but its overwrite old table.

enter image description here

its my array :

arr1 = [[NSMutableArray alloc]  initWithObjects:@"Whats up today ? ", @"Hello.", nil];

Here my source :

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

    static NSString *simleTableIdentifier = @"TeamCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simleTableIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TeamCell"];
    }


    cell.backgroundColor = [UIColor clearColor];
    tableView.scrollEnabled = YES;

    UIImageView *myRect = [[UIImageView alloc] initWithFrame:CGRectMake(20, 30, 10, 12)];
    myRect.image = [UIImage imageNamed:@"tri.png"];
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"jj.jpg"]];


    UILabel *label = [[UILabel alloc] init];
    label.text = [arr1 objectAtIndex:indexPath.row];
    label.numberOfLines = 0;
    label.lineBreakMode = NSLineBreakByWordWrapping;
    label.font =[UIFont systemFontOfSize:14.0];
    label.text = [arr1 objectAtIndex: indexPath.row];
    label.textColor = [UIColor blackColor];
    label.backgroundColor = [UIColor clearColor];
    label.frame = CGRectMake(40, 40, 210, 80);
    [label sizeToFit];

    UIImageView *imgim = [[UIImageView alloc] initWithFrame:CGRectMake(30, 10, label.frame.size.width+20, label.frame.size.height+20)];
    imgim.image = [UIImage imageNamed:@"bg.png"];

    CGRect myRectANGLE =  CGRectMake(imgim.frame.origin.x+10,imgim.frame.origin.y+10, label.frame.size.width, label.frame.size.height);

    [label setFrame:myRectANGLE];

    CALayer *addRadius = [imgim layer];
    [addRadius setMasksToBounds:YES];
    [addRadius setCornerRadius:5.0];
    [self.MyTableView setSeparatorColor:[UIColor clearColor]];
    [self.MyTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    self.MyTableView.transform = CGAffineTransformMakeScale(1, -1); //in viewDidLoad

    cell.transform = CGAffineTransformMakeScale(1, -1);//in tableView:cellForRowAtIndexPath:

    [[cell contentView] addSubview:myRect];
    [[cell contentView] addSubview:imgim];
    [[cell contentView] addSubview:label];
    return cell;
}

İf click send button i reload data but its overwite on old-data look like my photo :

-(IBAction)btnTap:(UIButton *)sender {
    [arr1 insertObject:Textify.text atIndex:0];

    NSLog(@"%i", arr1.count);
    [MyTableView reloadData]; 
}

Upvotes: 0

Views: 680

Answers (2)

numbbuaa
numbbuaa

Reputation: 17

UITableViewCell will be reused while reload, you should not create subviews again to add on cell.contentView.Try to use code below

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault     reuseIdentifier:@"TeamCell"];
    UILabel *label = [[UILabel alloc] initWithFrame:someFrame];
    label.tag = 1000;
    [cell.contentView addSubview:label];
}
UILabel *label = [cell.contentView viewWithTag:1000];
label.text = @"something";

Upvotes: 0

Kyle Emmanuel
Kyle Emmanuel

Reputation: 2221

Try clearing the cell's contentView subview, and then add the new subviews.

Here's a block of code for removing the subviews, taken from this post.

if ([cell.contentView subviews]){
   for (UIView *subview in [cell.contentView subviews]) {
       [subview removeFromSuperview];
   }
}

Upvotes: 1

Related Questions