Ios 表格滚动时自动取消选中行

Ios 表格滚动时自动取消选中行,ios,objective-c,uitableview,Ios,Objective C,Uitableview,当我滚动UITableView时,我的tableview单元格会自动取消选中。但当我按下“完成”按钮时,它会给我选择的行,我不明白为什么会发生这种情况 我的Tableview代码如下: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. idArray = [[NSMutableArray alloc]init]; NSLog(@"

当我滚动UITableView时,我的tableview单元格会自动取消选中。但当我按下“完成”按钮时,它会给我选择的行,我不明白为什么会发生这种情况

我的Tableview代码如下:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
idArray = [[NSMutableArray alloc]init];

NSLog(@"Cat Array : %@",catArray);
isSelectAllBtnClicked = NO;

serviceArray = [[NSArray alloc]initWithObjects:@"Anal", @"Cuffed", @"Foreplay",     @"Masturbation", @"Scat", @"Blindfolded",@"Deep throat", @"French Kissing", @"Missionary", @"Shower for 2", @"Bottom", @"Dinner Date", @"Full Bondage", @"Mutual Masturbation", @"Spanking", @"Boy on Boy", @"Dirty Talk",@"Girl on Girl", @"On top", @"Strap on", @"Choking", @"Doggy", @"Girlfriend Experience", @"Oral", @"Striptease", @"CIM", @"Dominate", @"Golden Shower",@"Oral Mutual", @"Submissive", @"COB", @"Fantasy", @"Kissing", @"Overnight", @"Top", @"COF", @"Fetish", @"Light Bondage", @"Rim me",@"Touching", @"Couples", @"Fisting", @"Lingerie", @"Rim you", @"Toys for me", @"Cuddling", @"Foot fetish", @"Massage", @"Role Play", @"Toys for you", nil];

[myTableView reloadData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *reuseIdentifier = @"reuseIdentifier";
        UITableViewCell *cell = [[UITableViewCell alloc]init];

        if (cell != NULL) 
        {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
        }
        cell.selectionStyle = UITableViewCellEditingStyleNone;
        cell.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"list_row_bg.png"]] autorelease];

        UILabel *catListLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 310, 20)];
        NSString *strValue = [[NSUserDefaults standardUserDefaults]valueForKey:@"service"];

        if ([strValue isEqualToString:@"service"]) 
        {
            catListLbl.text = [serviceArray objectAtIndex:indexPath.row];
            topHaderLabel.text = @"Choose Services";
        }
        else
        {
            catListLbl.text = [catArray objectAtIndex:indexPath.row]; 
            topHaderLabel.text = @"Choose Category";
        }

        catListLbl.textColor = [UIColor colorWithRed:244/255.0 green:29/255.0 blue:94/255.0 alpha:1.0];
        catListLbl.backgroundColor = [UIColor clearColor];
        [cell addSubview:catListLbl];

        if (isSelectAllBtnClicked) {
            UIButton *unCheckBtn = [[UIButton alloc]initWithFrame:CGRectMake(270, 10, 20, 20)];
            [unCheckBtn setBackgroundImage:[UIImage imageNamed:@"checkbox_check.png"] forState:UIControlStateNormal];
            unCheckBtn.tag = indexPath.row + 200;
            //NSLog(@"%i",unCheckBtn.tag);
            [cell addSubview:unCheckBtn];

            [myTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
            [self tableView:myTableView didSelectRowAtIndexPath:indexPath];

        }
        else {
            UIButton *unCheckBtn = [[UIButton alloc]initWithFrame:CGRectMake(270, 10, 20, 20)];
            [unCheckBtn setBackgroundImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal];
            unCheckBtn.tag = indexPath.row + 200;
            //NSLog(@"%i",unCheckBtn.tag);
            [cell addSubview:unCheckBtn];
        }

        return cell;
 }

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int buttonTag = indexPath.row + 200;
    //NSLog(@"%i",buttonTag);
    UIButton *tempBtn = (UIButton *)[self.view viewWithTag:buttonTag];
    [tempBtn setBackgroundImage:[UIImage imageNamed:@"checkbox_check.png"]forState:UIControlStateNormal];     
}

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int buttonTag = indexPath.row + 200;
    NSLog(@"%i",buttonTag);
    UIButton *tempBtn = (UIButton *)[self.view viewWithTag:buttonTag];
    [tempBtn setBackgroundImage:[UIImage imageNamed:@"checkbox.png"]forState:UIControlStateNormal];    
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int count;
    NSString *strValue = [[NSUserDefaults standardUserDefaults]valueForKey:@"service"];

    if ([strValue isEqualToString:@"service"]) 
    {
        count = [serviceArray count];
    }
    else
    {
        count = [catArray count];  
    }

    return count;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 40;
}

提前感谢。

尝试这样做,当您每次滚动tableview时都是SelectallBtcicked值为0,这就是为什么每次按钮都会更改

每次创建新单元格时滚动表格时,请尽量避免使用该单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        NSString *CellIdentifier = [NSString stringWithFormat:@"%d",indexPath.row];
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
        cell.selectionStyle = UITableViewCellEditingStyleNone;
        cell.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"list_row_bg.png"]] autorelease];

        UILabel *catListLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 310, 20)];
        NSString *strValue = [[NSUserDefaults standardUserDefaults]valueForKey:@"service"];

        if ([strValue isEqualToString:@"service"]) 
       {
          catListLbl.text = [serviceArray objectAtIndex:indexPath.row];
          topHaderLabel.text = @"Choose Services";
       }
        else
       {
        catListLbl.text = [catArray objectAtIndex:indexPath.row]; 
        topHaderLabel.text = @"Choose Category";
        }

       catListLbl.textColor = [UIColor colorWithRed:244/255.0 green:29/255.0 blue:94/255.0 alpha:1.0];
      catListLbl.backgroundColor = [UIColor clearColor];
      [cell addSubview:catListLbl];

       if (isSelectAllBtnClicked) {
        UIButton *unCheckBtn = [[UIButton alloc]initWithFrame:CGRectMake(270, 10, 20, 20)]; 
        [unCheckBtn setBackgroundImage:[UIImage imageNamed:@"checkbox_check.png"] forState:UIControlStateNormal];
        unCheckBtn.tag = indexPath.row + 200;
        //NSLog(@"%i",unCheckBtn.tag);
        [cell addSubview:unCheckBtn];

        [myTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
        [self tableView:myTableView didSelectRowAtIndexPath:indexPath];

    }
    else {
        UIButton *unCheckBtn = [[UIButton alloc]initWithFrame:CGRectMake(270, 10, 20, 20)];
        [unCheckBtn setBackgroundImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal];
        unCheckBtn.tag = indexPath.row + 200;
        //NSLog(@"%i",unCheckBtn.tag);
        [cell addSubview:unCheckBtn];
    }
        }

    }

尝试这样做,当您每次滚动tableview isSelectAllBtnClicked值为0时,这就是每次按钮更改的原因

每次创建新单元格时滚动表格时,请尽量避免使用该单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        NSString *CellIdentifier = [NSString stringWithFormat:@"%d",indexPath.row];
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
        cell.selectionStyle = UITableViewCellEditingStyleNone;
        cell.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"list_row_bg.png"]] autorelease];

        UILabel *catListLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 310, 20)];
        NSString *strValue = [[NSUserDefaults standardUserDefaults]valueForKey:@"service"];

        if ([strValue isEqualToString:@"service"]) 
       {
          catListLbl.text = [serviceArray objectAtIndex:indexPath.row];
          topHaderLabel.text = @"Choose Services";
       }
        else
       {
        catListLbl.text = [catArray objectAtIndex:indexPath.row]; 
        topHaderLabel.text = @"Choose Category";
        }

       catListLbl.textColor = [UIColor colorWithRed:244/255.0 green:29/255.0 blue:94/255.0 alpha:1.0];
      catListLbl.backgroundColor = [UIColor clearColor];
      [cell addSubview:catListLbl];

       if (isSelectAllBtnClicked) {
        UIButton *unCheckBtn = [[UIButton alloc]initWithFrame:CGRectMake(270, 10, 20, 20)]; 
        [unCheckBtn setBackgroundImage:[UIImage imageNamed:@"checkbox_check.png"] forState:UIControlStateNormal];
        unCheckBtn.tag = indexPath.row + 200;
        //NSLog(@"%i",unCheckBtn.tag);
        [cell addSubview:unCheckBtn];

        [myTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
        [self tableView:myTableView didSelectRowAtIndexPath:indexPath];

    }
    else {
        UIButton *unCheckBtn = [[UIButton alloc]initWithFrame:CGRectMake(270, 10, 20, 20)];
        [unCheckBtn setBackgroundImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal];
        unCheckBtn.tag = indexPath.row + 200;
        //NSLog(@"%i",unCheckBtn.tag);
        [cell addSubview:unCheckBtn];
    }
        }

    }

当你滚动表格时

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

方法执行时,您并没有提到任何条件,通过这些条件可以判断该行以前是否被选中。您必须在indexPath.row中插入一个条件,并在滚动表格时检查它是否被选中

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

方法执行时,您并没有提到任何条件,通过这些条件可以判断该行以前是否被选中。您必须在indexPath.row中插入一个条件,并检查它是否被选中。

@user2239835:这样尝试一次。在这种条件下,您是否将所有代码都放在if(cell==nil)中?应用程序gtng何时崩溃以及崩溃后问题。@user2239835:这样尝试一次。是否将所有代码都放在if(cell==nil)中在这种情况下?wher app gtng崩溃和崩溃后问题。您解决了那个问题吗?您解决了那个问题吗?hi@user2239835这将不起作用。您必须管理一个数组,通过该数组保存所选行,然后您应该在cellForRowAtIndexPath中检查indexPath.row是否在选定行数组则图像应为checkbox\u check.png else…hi@user2239835这将不起作用您必须管理一个数组,通过该数组保存选定行,然后您应在cellForRowAtIndexPath中进行检查,如果indexPath.row位于选定行数组中,则图像应为checkbox\u check.png else...