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