iOS更改背景图像

iOS更改背景图像,ios,objective-c,Ios,Objective C,我想在tableview中创建一个简单的复选框。首先,我在故事板中创建视图,每个元素在单元格中都有一个标记。然后我在Controller.m中编码了这个 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... UIButton *checkbox = (UIButton *)[cell viewWithTag:103]

我想在tableview中创建一个简单的复选框。首先,我在故事板中创建视图,每个元素在单元格中都有一个标记。然后我在Controller.m中编码了这个

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    UIButton  *checkbox = (UIButton *)[cell viewWithTag:103];
    checkbox.selected = NO;

    [checkbox setBackgroundImage:[UIImage imageNamed:@"uCheckbox2px"] forState:UIControlStateNormal];

    [checkbox addTarget:self action:@selector(changeState:) forControlEvents:UIControlEventTouchUpInside];
    ...
}

-(void) changeState:(UIButton *)checkbox
{

    checkbox.selected = !checkbox.selected;
    if (checkbox.selected)
        [checkbox setBackgroundImage:[UIImage imageNamed:@"cCheckbox2px"] forState:UIControlStateSelected];
    else
       [checkbox setBackgroundImage:[UIImage imageNamed:@"uCheckbox2px"] forState:UIControlStateNormal];
}

但如果我点击按钮,图像不会改变。这是为什么?我如何解决?
谢谢你的帮助

我想您在按钮点击事件中给出的代码是不需要的。只有改变状态就足够了

    if (checkbox.selected)
        [checkbox setBackgroundImage:[UIImage imageNamed:@"cCheckbox2px"] forState:UIControlStateSelected];
    else
       [checkbox setBackgroundImage:[UIImage imageNamed:@"uCheckbox2px"] forState:UIControlStateNormal];

但是您需要在
单元格中为这两种状态指定图像(
UIControlStateSelected
uicontrolstatemnormal

这是因为每次调用cellforrowatinexpath:
checkbox.selected=NO将使所选属性为FALSE。因此在此之后,在变更状态下:

checkbox.selected = !checkbox.selected;
将所选属性更改为TRUE。因此,每当您点击该按钮时,所选属性将仅变为TRUE。所以移动复选框。选中=否
的内部,如果(单元格==nil)
条件

如下所示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    UIButton  *checkbox = (UIButton *)[cell viewWithTag:103];

    [checkbox setBackgroundImage:[UIImage imageNamed:@"uCheckbox2px"] forState:UIControlStateNormal];
    [checkbox setBackgroundImage:[UIImage imageNamed:@"cCheckbox2px"] forState:UIControlStateSelected];

    [checkbox addTarget:self action:@selector(changeState:) forControlEvents:UIControlEventTouchUpInside];
    ...
}

-(void) changeState:(UIButton *)checkbox
{

    checkbox.selected = !checkbox.selected;
}