如何在有条件的uitableview中制作复选框?

Posted

技术标签:

【中文标题】如何在有条件的uitableview中制作复选框?【英文标题】:how to make checkbox in uitableview with condition? 【发布时间】:2014-05-21 19:17:23 【问题描述】:

当我点击 btn1 UITableview 时,我有两个按钮显示与下图 1 相同,我单击 btn2 UIableView 时显示与下图 2 相同

我正在使用自定义单元格。我已经完成了表格重新加载,但它在 UITableview 中都显示了“复选框”。

  BOOL isChecked;
  isChecked = true;


    -(IBAction)btn1:(id)sender
      
        isChecked = true;
      [self.mytableview reload];
      
    -(IBAction)btn2:(id)sender
      
        isChecked = false;
      [self.mytableview reload];
      

cellRowAtIndexPath 方法在:

  if(isChecked)
  
    customcell.trLabel.text = [arr1 objectAtIndex : indexpath.row]
    [customcell.button setImage:[UIImage imageNamed:@"checked.png"] forState:UIstateselected];
     [customcell.button setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIstateNormal];
     [customcell.button addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
  
  else
  
    customcell.trLabel.text = [arr2 objectAtIndex : indexpath.row]
    [customcell.buttton = NULL;
  

不同的方法

 -(void)checkButtonTapped:(id)sender
  
      sender.selected = !sender.selected;
  

image 1

image 2

我已经全选了。

didSelect方法:

  DemoTableViewCell *cell;
if(indexPath.row == 0)

    for (int i = 0; i < [self.tableview1 numberOfSections]; i++) 
        for (int j = 0; j < [self.tableview1 numberOfRowsInSection:i]; j++) 
            NSUInteger ints[2] = i,j;
            NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:ints length:2];
            cell = (DemoTableViewCell *)[self.tableview1 cellForRowAtIndexPath:indexPath];
            //Here is your code

            UIButton *btn = cell.button;

            if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"checked.png"]])
            
                [btn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
                // other statements
            
            else
            
                [btn setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];

            
        
    

else


   cell = (DemoTableViewCell *)[self.tableview1 cellForRowAtIndexPath:indexPath];

    UIButton *btn = cell.button;

    if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"checked.png"]])
    
        [btn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
        // other statements
    
    else
    
        [btn setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];

    



我的问题是:

1) 选择所有选项选择所有已完成的“复选框”,但是当我“取消选中”其中任何一项时,选择所有选项也将“取消选中”。 2) 在图像 2 UITablevieCell 中不显示“复选框”。 3) 当我“取消选中”item3 并再次单击全选选项时,取消选中除 item3 和 item3 之外的所有“复选框”。

【问题讨论】:

【参考方案1】:

解决方案2)在图片2 UITablevieCell中不显示“checkbox”

您需要创建一个不带复选框的不同原型单元格。 然后在cellRowAtIndexPath 方法中,如果单击了按钮 2,则使用该单元格


对于其他问题,您需要存储每个复选框的状态(在数组或字典中)。然后在cellRowAtIndexPath方法中根据该行中复选框的状态,勾选或取消勾选单元格的复选框

1) 在您的 ViewController 中有 NSMutableArray,您可以在其中存储所有复选框状态(勾选或未勾选)。

2) 在勾选/取消勾选复选框时调用的方法中,更新数组中的 1 或 0,如:

- (void) actionCheckbox 
        self.mydata[indexPath.row] = 1;    // set 0 or 1
        [self.tableview reloadRowsAtIndexPath ...];  // Don't remember exact method name

3) 在cellRowAtIndexPath

 if(self.mydata[indexPath.row] == 1) 
     // tick checkbox for this row
  else 
     // untick checkbox for this row
 

【讨论】:

我得到了你的第一个解决方案。但我没有得到另一个解决方案,你能给我任何例子或完美的提示@user427969 嗨,我明白你的回答,但给我一个警告或错误。 @user427969 我收到警告 int 到 id 而不是对话错误。你有完美的解决方案吗?请给我和同样的问题,当我按下全选复选框时,如何在 do-select 方法中存储选定的索引我取消选中其中任何一个选择所有选项而不是取消选中。或者我再次按下选择所有选项,除了取消选中选项为选中,其他未选中请提供解决方案@user427969 对不起,我不能做你的工作。我只能指引你正确的方向。 在 Select All 按钮的操作中,遍历整个 self.mydata 数组并将所有内容设置为 1,对于 Uncheck All 按钮的操作,将所有内容设置为 0。之后重新加载表。

以上是关于如何在有条件的uitableview中制作复选框?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UITableView 中的选定单元格制作透明背景

如何在有条件的 apache camel 中添加后处理拦截器?

如何在有条件的情况下改变状态 - React

如何使用一个 UIButton 从 UITableView 中选择和取消选择所有复选标记?

iOS UITableview 在有 HeaderView的时候滚动到顶部

iOS UITableview 在有 HeaderView的时候滚动到顶部