2011-04-21 50 views
1

我正在使用UITableView,我有一个与每行项目相关的复选框。表格中的复选框UITableView

单击按钮事件时,它应该生成UITableView中的选中项目列表。

我无法做到这一点,请帮助我

回答

0

通过SO链接。

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

checkbox button in table view in iphone

更多阅读苹果文档的在UITableViewCell管理选择。

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 

    } 
} 
+0

如何在表 – sujay 2011-04-21 10:20:50

+0

@sameer创建3个复选框3行:添加一个UIButton的每个细胞, – Jhaliya 2011-04-21 10:22:23

+0

@sameer:接受,如果我的回答可以帮助您。 – Jhaliya 2011-04-23 17:52:50

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]; 
       } 
      } 
     } 
    } 
}