如何在条件中使用uitableview复选框?

时间:2014-05-21 19:17:23

标签: ios uitableview ios7 custom-cell

当我点击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;
  }

图片1

图片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中显示“checbox”。 3)当我“取消选中”item3并再次点击时,选择所有选项取消选中除“item3”和“item3”之外的所有“复选框”。

1 个答案:

答案 0 :(得分:0)

解决方案2)在图像2 UITablevieCell

中不显示“checbox”

您需要创建一个不带复选框的不同原型单元格。 然后在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
 }