Tableview images chaging when scrolling using cust

2020-04-30 01:56发布

问题:

I have a Tableview and i am using the customTableview cell for displaying the cell

in the cell i have 5 buttons (rating buttons) when i click on particular button the image of the button has to changed its working fine but when i am scrolling the tableview again thay are changing to normal rating buttons see the following images for clarity

This is the image before scrolling and clicking nothing on button

after clicking the on rating buttons the image is changing like this

but when scrolling the cells again its changing to first image

please help me out

Code :

- (UITableViewCell )tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    dataCell = (DataCel)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (dataCell==nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DataCel" owner:self options:nil]; dataCell = [nib objectAtIndex:0];
    }
    return dataCell;
}

回答1:

you should save the sate of the button images and in your

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

insert code to keep them updated for ex:

  static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) 
        {
//create your cell here if it was not created 
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
            [cell.textLabel setFont:[UIFont boldSystemFontOfSize:13]];
            [cell.textLabel setTextColor:[UIColor darkGrayColor]];
            [cell.detailTextLabel setFont:[UIFont boldSystemFontOfSize:11]];
            [cell.detailTextLabel setTextColor:[UIColor lightGrayColor]];
            cell.detailTextLabel.numberOfLines = 2;
        }

        NSArray *array = [imageArray objectAtIndex:[indexPath row]];
        if([[array objectAtIndex:3] isEqual:@"rate3"])
        {
            //set the code for the rating 3
        }
        else
        {
            //insert another rate depending on your object
        }


回答2:

This is because every time you scroll the UITableView, it refreshes its values from the data you provided it ! So the value is not retained. To prevent this from happening every time you scroll the database you can use this

static NSString *cellIdentifier = @"Identifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if(cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
}

for(id obj in cell.contentView.subviews)
{
    if([obj isKindOfClass:[UIImageView class]] || [obj isKindOfClass:[UILabel class]])
    {
        [obj removeFromSuperview];
    }
}

This would not let the values be overlapped.



回答3:

When scrolled the cells are recreated and so you need the keep the selected values in a seperate array and set it in the cellForRowAtIndexPath method



回答4:

This happens because every time you scroll the tableview , it re-create tableview cell. therefor you can use array for reused it.



回答5:

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

{
    static NSString *cellId = @"cellId";
    UITableViewCell *cell = [categoriesTableview dequeueReusableCellWithIdentifier:cellId];
    if (cell==nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];

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

// ui goes here

return cell
}