0

我有一个UITableViewControllerUITableView它的单元格通过accessoryView. 这些按钮可以selected/deselected在用户点击它们时出现。它table本身由NSMutableArray包含多个NSString参数的对象组成,“名称”参数显示在表中。

我现在要做的是在选择按钮时,将OBJECT链接到相应"name"参数的相应链接添加到NSMutableArray. 用户没有选择单元格,而是单击了附加到单元格的按钮。

这是我在每个中selects/deselects的方法:buttoncell

-(void)buttonTouched:(id)sender
{
    UIButton *btn = (UIButton *)sender;

    if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"CheckBox1.png"]])
    {
        [btn setImage:[UIImage imageNamed:@"CheckBox2.png"] forState:UIControlStateNormal];
        // statement to add object to NSMutableArray
    }
    else
    {
        [btn setImage:[UIImage imageNamed:@"CheckBox1.png"] forState:UIControlStateNormal];
        // statement to remove object from NSMutableArray
    }

}


//Here is my code that shows how I initialize my button and cell in my UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        testButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [testButton setFrame:CGRectMake(280, 57, 25, 25)];
        [testButton setImage:[UIImage imageNamed:@"CheckBox1.png"] forState:UIControlStateSelected];
        [testButton setImage:[UIImage imageNamed:@"CheckBox2.png"] forState:UIControlStateNormal];
        [testButton setUserInteractionEnabled:YES];
        [testButton addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchUpInside];
        [testButton setTag:cell.tag];
        [cell setAccessoryView:testButton];
        //[cell setAccessoryType:UITableViewCellAccessoryCheckmark];

    }

    // Configure the cell...
    TestObject *tObject = [[DataModel sharedInstance].testList objectAtIndex:indexPath.row];
    cell.textLabel.text = tObject.testTitle;

    return cell;

}

我的问题不是将对象实际添加到数组中,而是从按钮派生相应的单元格,然后从该单元格派生正确的对象。

4

4 回答 4

0

您可以为每个按钮添加 view.tag:例如,将 101 分配给第一个按钮,将 102 分配给第二个按钮等。

然后,此标签对应于数组中的一个位置,您可以在其中找到更多信息。

于 2013-01-08T19:58:35.060 回答
0

当你这样做时,你需要一种方法将你的单元格链接到你的按钮,你有几个选择

1-将按钮上的标签设置为数组中元素的相应索引,这样您就可以通过标签属性获取单元格,如果您要删除单元格,这可能会出现问题,因为您必须更新您的按钮标签。

2- 使用字典将您的按钮映射到您的单元格

因此,如果您使用标签标记索引,则可以使用 UITableViewCell 的 cellForRowAtIndexPath 来获取单元格,数据对象也应该在具有该索引的数据源数组中。丹尼尔

于 2013-01-08T19:58:53.577 回答
0

我过去做过的一件事是将按钮的标签设置为单元格的行。这仅在以下情况下有效:

  • 您的表格中只有一个部分
  • 你总是设置按钮的标签tableView:cellForRowAtIndexPath:(因为出队)
  • 您的表格是只读的(这意味着您不允许删除或移动单元格)

对于更复杂的表格,您可能需要从按钮到对象的映射。

于 2013-01-08T19:59:50.900 回答
0

也许NSMutableArray您可以使用 anNSMutableDictionary并为新项目分配一个键,而不是使用 an ,以便更简单地订购它。

于 2013-01-08T20:00:32.613 回答