在uitableviewcell中创建复选框

时间:2012-08-08 08:17:24

标签: objective-c ios xcode uitableview

我有不同的部分和行的uitaleviewcell,我想要在图片中看到复选框单元格

我的问题是如何在uitableviewcells中创建复选框?(我使用的是storyboard)

enter image description here

3 个答案:

答案 0 :(得分:0)

使用UISwitch并在属性检查器中,为正常状态设置空框图像,为突出显示状态设置复选框图像。但是,复选框行为由ios中的开关表示,复选框的命中区域非常小,可能会给用户带来一个问题,特别是当它们彼此靠近时,就像您提供的图像一样。

UISwitch Reference

答案 1 :(得分:0)

每个复选框单元格应为自定义 TableViewCell。然后只需在TableViewCell中放置一个ImageView和一个Label,并使用didSelectRowAtIndex:在选中/取消选中之间切换图像。

答案 2 :(得分:0)

您需要两个用于imageView of cell

的图像
#define SELECTED_ROW @"selectedRowImage.png" // CheckBox with Selected sign png
#define NOT_SELECTED_ROW @"notSelectedRowImage.png" // Empty CheckBox png

      // listSelected is array of indexes selected

in ViewDidLoad:

NSMutableArray *listSelected = [[NSMutableArray alloc]init];

// CellForRowAtIndexPath:

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

    static NSString *cellIdentifier = @"select";    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];

        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

   if ([self checkIfIndexPathAlreadySelected:indexPath])
            cell.tag = 1;
        else cell.tag = 0;

    if(cell.tag == 0)
        cell.imageView.image = [UIImage imageNamed:NOT_SELECTED_ROW]; 
    else
        cell.imageView.image = [UIImage imageNamed:SELECTED_ROW];   

    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {     

     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];     
     if(cell.tag == 0)
     {
         cell.tag = 1;
         [self.listSelected addObject:indexPath]];
         cell.imageView.image = [UIImage imageNamed:SELECTED_ROW];        
     }
     else if(cell.tag == 1)
     {
         cell.tag = 0;
         [self.medicineIndexArray removeObject:indexPath];
         cell.imageView.image = [UIImage imageNamed:NOT_SELECTED_ROW];        
     }
 }


- (BOOL)checkIfIndexPathAlreadySelected:(NSIndexPath *)indexPath
{

    if([self.listSelected containsObject:indexPath])
        return YES;
    else 
        return NO;
}