iOS更改背景图片

时间:2013-11-05 10:59:13

标签: ios objective-c

我想在tableview中创建一个简单的复选框。首先,我在故事板中创建View,每个元素在单元格中都有一个标记。然后我在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];

}

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

3 个答案:

答案 0 :(得分:1)

这是因为每次调用 cellForRowAtIndexPath: checkbox.selected = NO;都会使所选属性 FALSE 。所以在那之后,在 changeState:

checkbox.selected = !checkbox.selected;

会将所选属性更改为 TRUE 。因此,只要您点按该按钮,所选属性就会变为 TRUE 。因此,将 checkbox.selected = NO; 移至if(cell == nil)条件

答案 1 :(得分:1)

像这样做

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

答案 2 :(得分:0)

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

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

但您需要在UIControlStateSelected中指定两种状态(UIControlStateNormalcellForRowAtIndexPath)的图像。

相关问题