使用 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

使用 UIButton 自定义 UITableViewCell:无法更改 UIImage

使用自定义图像添加新的 UIButton“状态”

使用自定义 UIButton 删除 UITableViewCell

如何使用自定义 UIButton 获得 UISegementedControl 功能?

使用普通/高亮图像创建自定义 UIButton