动态更改 UITableView 单元格中 UIButton 的图像

Posted

技术标签:

【中文标题】动态更改 UITableView 单元格中 UIButton 的图像【英文标题】:Change Image of UIButton in UITableView Cell Dynamically 【发布时间】:2013-01-01 08:18:24 【问题描述】:

我在单元格中动态添加UIButton 并在点击UIBarButtonItem 时更改UIButton 图像 我怎么能改变?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Display"] ; 
    [cell.textLabel setText:[NSString stringWithFormat:@"%@" ,[arrItemList objectAtIndex:indexPath.row]]];

    UIButton *btnCheck = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnCheck.frame = CGRectMake(6.0f, 2.0f, 32.0f, 25.0f);
    [btnCheck setTitle:@"" forState:UIControlStateNormal]; 
    [btnCheck addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside];
    [cell addSubview:btnCheck]; 

    return cell;

//Here IBAction for Bar Button Item
//when ever user click on BarButton then set the image of all btnCheck
-(IBAction)bbtnCheck:(id)sender


【问题讨论】:

你能告诉我你的代码吗,到目前为止你尝试或做了什么? 好的我已经放了。你可以看到 没有动作?按钮上没有可显示的图像? [bttnCheck setImage:unselectedImage forState:UIControlStateNormal]; 我第一次不需要任何动作和任何图像,但是当用户点击栏按钮时,我不会在动态生成的所有按钮上设置图像。 【参考方案1】:

假设您的问题是如何在单击条形按钮时更改表格每个单元格中的按钮图像,我建议如下:

在 tableView:cellForRowAtIndexPath 中,添加:

btnCheck.tag = MY_BUTTON_TAG_NUMBER;

然后,当单击条形按钮项时,循环遍历可见单元格并使用按钮的标签来识别它并更新其图像。

-(IBAction)bbtnCheck:(id)sender 
 for (UITableViewCell *cell in self.tableView.visibleCells) 
   UIButton *button = [cell viewWithTag:MY_BUTTON_TAG_NUMBER];
   [button setImage:[UIImage imageNamed:SOME_NEW_IMAGE] forState:UIControlStateNormal];
  

【讨论】:

【参考方案2】:

在该 bbtnCheck 中,您必须获取该 tableView 的实例(即特定单元格)..然后您可以在该特定单元格上添加按钮.. 请检查这个....

-(IBAction)bbtnCheck:(id)sender

     NSIndexPath *indexpath = [NSIndexPath indexPathForRow:YourRow inSection:YourSection]; // you have to set Row and Section according to your requirement
     UITableViewCell *cellNew = [self.tblComments cellForRowAtIndexPath:indexpath];
    for (UIButton *btn in [cellNew.contentView subviews]) 
    
        if ([btn isKindOfClass:[UIButton class]]) 
        
            [btn setImage:[UIImage imageNamed:@"yourImage.png"] forState:UIControlStateNormal];
        
        

【讨论】:

您将无法像这样引用单元格中的按钮。 我怎样才能在这种方法中访问 btnCheck 是否可能?? @user1934408:使用自定义单元格并将按钮添加到自定义单元格中,并在 cellAtIndex... 方法中将目标设置为按钮,然后您可以像上面一样访问... 循环遍历所有子视图是浪费且不具体的。只需标记按钮子视图,如上所示。 这已经是太多了。如果/当将来添加其他子视图时,这个数字会增加。您还假设单元格中的所有按钮都具有相同的行为。

以上是关于动态更改 UITableView 单元格中 UIButton 的图像的主要内容,如果未能解决你的问题,请参考以下文章

更改单元格中的数据后,UITableView 中的自定义单元格将无法正确重新加载

滚动 UITableView 时自定义单元格中的 UITextField 文本正在更改

如何让 UITableView 在动态高度单元格中滚动到底部?

在同一 UITableView 的单元格中更改 UITextFields 之间的焦点

UITableView 单元格中的动态形状(Swift)

自定义 UITableView 单元格中的 UILabel 未随核心数据更改而更新