表UITableView中的复选框

时间:2011-04-21 05:53:48

标签: iphone objective-c cocoa-touch uitableview

我正在使用UITableView并且我有一个与每行项目相关的复选框。

在按钮的点击事件中,它应该生成UITableView中已检查项目的列表。

我无法这样做,请帮帮我

2 个答案:

答案 0 :(得分:0)

浏览SO链接。

Checkbox cell in a table view: User can't check it

checkbox button in table view in iphone

有关详细信息,请参阅UITableViewCell中的管理选择Apple Doc's。

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/TableView_iPhone/ManageSelections/ManageSelections.html

<强>编辑:

使用UIButton的标记属性,

#define KON  1 //For checked state 
#define KOFF 0 //For Unchecked state 

-(void) myButtonAction:(id) sender
{
    UIButton* myButton = (UIButton*) sender;

    if(myButton.tag == KON)
    {
         myButton.tag = KOFF;
         //Change the button image 
    }
    else 
    {
         myButton.tag = KON;
         //Change the button image 

    }
}

答案 1 :(得分:0)

示例,单击第一行用于更改其他行。单击其他行仅更改自身。 arrCheckbox是一个用于存储所有行检查的数组。

- (UITableViewCell *)tableView:(UITableView *)tableview cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //NSLog(@"AV--%s", __func__);
    HistoryCell2 *cell = [tableview dequeueReusableCellWithIdentifier:CellId];

    if (cell == nil) {
        NSLog(@"Create new row");
        [tableview registerNib:[UINib nibWithNibName:@"HistoryCell2" bundle:nil] forCellReuseIdentifier:CellId];
        cell = [tableview dequeueReusableCellWithIdentifier:CellId];
    }
    cell.tag = indexPath.row;

    BOOL checked =  [[arrCheckbox objectAtIndex:indexPath.row] boolValue];
    UIImage *image = (checked) ? [UIImage imageNamed:@"cb_on.png"] : [UIImage imageNamed:@"cb_off.png"];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    CGRect frame = CGRectMake(1.0, 1.0, 29, 29);
    button.frame = frame;   // match the button's size with the image size
    button.tag = indexPath.row;
    [button setBackgroundImage:image forState:UIControlStateNormal];

    // set the button's target to this table view controller so we can interpret touch events and map that to a NSIndexSet
    [button addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:button];

    return cell;
}

- (void) checkButtonTapped:(id)sender
{
    NSLog(@"%s", __func__);
    UIButton *tappedButton = (UIButton*)sender;
    int index = (int)tappedButton.tag;
    NSLog(@"Row button: %d", index);

    if(index > 0)
    {
        BOOL checked = [[arrCheckbox objectAtIndex:index] boolValue];
        [arrCheckbox removeObjectAtIndex:index];
        [arrCheckbox insertObject:(checked) ? @"0":@"1" atIndex:index];

        UIImage *newImage = (checked) ? [UIImage imageNamed:@"cb_off.png"] : [UIImage imageNamed:@"cb_on.png"];
        [tappedButton setBackgroundImage:newImage forState:UIControlStateNormal];
    }
    else{
        //UITableView *tableview = (UITableView *)[[tappedButton superview] superview];
        UIImage *newImage;
        BOOL checked = [[arrCheckbox objectAtIndex:0] boolValue];
        for(int i=0; i<[arrCheckbox count]; i++)
        {
            //NSLog(@"Row: %d------", i);
            [arrCheckbox removeObjectAtIndex:i];
            [arrCheckbox insertObject:(checked) ? @"0":@"1" atIndex:i];

            UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
            for(UIView *subview in cell.contentView.subviews)
            {
                if([subview isKindOfClass: [UIButton class]])
                {
                    //NSLog(@"Modify button");
                    tappedButton = (UIButton*)subview;
                    //[subview removeFromSuperview];
                    newImage = (checked) ? [UIImage imageNamed:@"cb_off.png"] : [UIImage imageNamed:@"cb_on.png"];
                    [tappedButton setBackgroundImage:newImage forState:UIControlStateNormal];
                }
            }
        }
    }
}