使用 UIButton 自定义 UITableViewCell:无法更改 UIImage
Posted
技术标签:
【中文标题】使用 UIButton 自定义 UITableViewCell:无法更改 UIImage【英文标题】:Custom UITableViewCell with UIButton: unable to change UIImage 【发布时间】:2013-12-05 08:00:15 【问题描述】:我有一个自定义 UITableView
和自定义 UITableViewCell
它包含一个 UIButton
我想在用户选择它时更改所选按钮的背景图像,
不幸的是,每当我按下它并显示图像时,图像都不会改变状态:
由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[UIView setBackgroundImage:forState:]:
这是我的代码 sn-p:
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
static NSString *CellIdentifier = @"BTSTicketsCellIdentifier";
CRIndCategCell *cell = (CRIndCategCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
//Initialize cell
cell.favBtn.tag=indexPath.row;
[cell.favBtn addTarget:self action:@selector(AddToFav:) forControlEvents:UIControlEventTouchUpInside];
...
...
...
-(IBAction)AddToFav:(id)sender
NSLog(@"Value of selected button = %ld",(long)[sender tag]);
UIButton *Btn=(UIButton*)[self.view viewWithTag:(long)[sender tag]];
[Btn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[Btn setBackgroundImage:[UIImage imageNamed:@"grey-star.png"] forState:UIControlStateNormal];
我的日志正确显示所选按钮的值,但无法更改按钮的图像
感谢您的阅读。
【问题讨论】:
【参考方案1】:尝试将您的AddToFav:
方法修改为:
-(IBAction)AddToFav:(UIButton *)sender
NSLog(@"Value of selected button = %ld",(long)[sender tag]);
[sender setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[sender setBackgroundImage:[UIImage imageNamed:@"grey-star.png"] forState:UIControlStateNormal];
或者使用这个:
-(IBAction)AddToFav:(UIButton *)sender
NSLog(@"Value of selected button = %ld",(long)[sender tag]);
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
for (UIButton *btn in [cell.contentView.superview subviews] )
if ([btn isKindOfClass:[UIButton class]]&& btn.tag ==(long)[sender tag])
[btn setBackgroundImage:[UIImage imageNamed:@"grey-star.png"]
【讨论】:
【参考方案2】:检查按钮的标签是否 == 0。这是 UITableViewCell 的 contentView 的默认标签,您可能正在尝试更改单元格的 contentView 的图像。
【讨论】:
以上是关于使用 UIButton 自定义 UITableViewCell:无法更改 UIImage的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIButton 自定义 UITableViewCell:无法更改 UIImage
使用自定义 UIButton 删除 UITableViewCell