3

在我的代码中,我有一个表格视图,其中许多部分按字母顺序排序。我有checkboxes(UIButton)表格行,我需要根据行中输入的相应状态检查它们。我做过

checkbutton.tag = indexpath.row; 

但是当表格滚动和部分发生变化并且我在我的复选框方法中获得前一部分的状态时。任何人请帮助我。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   CheckButton = [UIButton buttonWithType:UIButtonTypeCustom];
   [CheckButton addTarget:self action:@selector(CheckBoxAction:)      forControlEvents:UIControlEventTouchUpInside];
   CheckButton.tag=indexPath.row;
   //some other stuff
   [cell.contentView addSubview:CheckButton];
}

这是我的CheckBoxAction

-(void)CheckBoxAction:(UIButton *)btn
{
    tag = btn.tag;
    NSDictionary *tagdict =[statusArray objectAtIndex:tag]; 
}

现在,问题是indexpath.row无论何时更改部分都是 0,所以我无法访问我的CheckBoxAction.

4

3 回答 3

2

使用它来获取您点击的当前行。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 CheckButton = [[UIButton alloc] init];

[CheckButton addTarget:self action:@selector(CheckBoxAction:)     forControlEvents:UIControlEventTouchUpInside];
CheckButton.tag=indexPath.row;
[cell addSubview:CheckButton];
}


-(void)CheckBoxAction:(id)sender
{
  // Cast Sender to UIButton
UIButton *button = (UIButton *)sender;

// Find Point in Superview
CGPoint pointInSuperview = [button.superview convertPoint:button.center toView:self.tableView];

// Infer Index Path
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:pointInSuperview];

// Log to Console
NSLog(@"selected Row : %d", indexPath.row);
}
于 2013-07-19T10:37:02.120 回答
1

// 试试这个

CheckButton.tag = [[NSString stringWithFormat:@"%d%d",indexPath.section,indexPath.row] integerValue];

或者

// 试试这个下面的链接来获取逻辑,如何处理 UITableView 中的复选框

在 UITableView 中设置复选标记

于 2013-07-19T10:15:13.553 回答
0

你所做的在很多方面都是错误的。因此,我不会为您遇到的确切问题提供解决方案,而是提供更多指导:

  1. 首先,您将复选框直接添加到单元格,这意味着您可以将多个 CheckButton 添加到同一个单元格,如果您滚动UITableView几次。

  2. 直接在单元格上添加 checkButton 而不是在 中继续添加cellForRowAtIndexPath,这可以提高性能。

  3. 使用当用户单击按钮时将执行的块。通过这种方式,您可以捕获UIViewController. 您应该将该块分配给上的单元格cellForRowAtIndexPath

于 2013-07-19T10:18:18.630 回答