在iOS中的UITableView中从单元格内的按钮调用方法时遇到问题

时间:2013-01-08 17:33:16

标签: ios uitableview uibutton

我有一个具有tableView的UITableViewController。每个单元格都有一个可以像复选框一样选择/选择的按钮,执行此操作的方法工作正常。我希望有另一种方法可以通过tableheaderview中的按钮调用,该按钮能够遍历此列表并一举选择所有按钮。具有讽刺意味的是,我能够执行迭代,但似乎无法调用选择/取消选择按钮的方法。

以下是我的相关代码:

//This is my method does the iteration
- (void) startWizard {

    NSLog(@"Did it select?");

    for (int i = 0; i < [self.tableView numberOfSections]; i++) {
        for (int j = 0; j < [self.tableView numberOfRowsInSection:i]; j++) {
            NSUInteger ints[2] = {i,j};
            NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:ints length:2];
            UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
            //Here is my code to call the method that selects/deselects
            [self buttonTouched:nil];



        }
    }
}

以下是对每个按钮进行实际选择/取消选择的方法(并且工作正常):

-(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];
        // other statements
    }
    else
    {
        [btn setImage:[UIImage imageNamed:@"CheckBox1.png"] forState:UIControlStateNormal];
        // other statements
    }

}

每个单元格中的按钮已作为其accessseryView添加到该单元格中,如下所示:

[cell setAccessoryView:testButton];

任何人都可以看到我做错了什么,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

当您在循环[self buttonTouched:nil];中进行呼叫时,您使用buttonTouched作为nil的值调用方法sender。因此,buttonTouched中的第一行将btn设置为nil,其余方法按nil按钮操作。 要么找到将实际按钮对象传递给buttonTouched的方法,要么传递indexPath并找到正确的按钮。