• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - TableView 单元格按钮更改其他单元格的内容

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:00:14 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

单击特定表格 View 单元格上的按钮时,该按钮单击并更改为复选标记。但是,其他单元格也会变为复选标记。并且重新加载 tableview 不会使复选标记消失。我知道这与可重复使用的细胞有关。但是如何从单击单元格按钮时调用的方法更新 cellForRowAtIndex?

 -(UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath {

    // Configure the cell...
    static NSString *ReusableIdentifier = @"Cell";
     SetListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReusableIdentifier forIndexPath:indexPath];


    cell.delegate = self;

    if ([self.selectedRows containsIndex:indexPath.row]) {
    [cell.plusButton setBackgroundImage:checkImage forState:UIControlStateNormal];
        }
        else {
            [cell.plusButton setBackgroundImage:plusImage forState:UIControlStateNormal];
        }


    return cell; 

    }

自定义单元格类中的方法。

- (IBAction)addSongButtonPressedUIButton *)sender
{
[self.delegate addSongButtonPressedOnCell:self];

UIImage *checkImage = [UIImage imageNamed"check.png"];
[self.plusButton setBackgroundImage:checkImage forState:UIControlStateNormal];

}

来自单元委托(delegate)的方法。

-(void)addSongButtonPressedOnCellid)sender
{
    NSIndexPath *indexPath = [self.searchTableView indexPathForCell:sender];
NSMutableDictionary *track = [self.searchTracks objectAtIndex:indexPath.row];

[self.selectedRows addIndex:indexPath.row];


}



Best Answer-推荐答案


您需要在单元格之外跟踪选择状态 - 单元格是显示来自数据模型的信息的 transient 对象,您不能使用它来存储状态。

由于您的轨道数据具有不可变的字典,因此您需要添加一个额外的数据结构来存储您的选择状态。我会使用 NSMutableSet

给你的 View Controller 添加一个属性

@property (strong,nonatomic) NSMutableSet *selectedRows;

并在viewDidLoad

中初始化
self.selectedRows=[NSMutableSet new];

然后您可以使用 to 来跟踪/检查选择状态 -

-(UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath {

// Configure the cell...
static NSString *ReusableIdentifier = @"Cell";
SetListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReusableIdentifier forIndexPath:indexPath];

NSDictionary *track = [self.searchTracks objectAtIndex:indexPath.row];
cell.searchSongTitle.text = [track objectForKey"title"];
cell.searchArtist.text = [[track objectForKey"user"]objectForKey"username"];

cell.plusButton.tag=indexPath.row;    

if ([self.selectedRows containsIndex:indexPath.row]) {
    [cell.plusButton setBackgroundImage:checkImage forState:UIControlStateNormal];
}
else {
    [cell.plusButton setBackgroundImage:nil forState:UIControlStateNormal];
}



//If there is no picture available. Adds a Custom picture.
if ([[track objectForKey"artwork_url"] isEqual:[NSNull null]]){
    cell.searchAlbumArtImage.image = [UIImage imageNamed"SoundCloudLogo"];
}
else{
    //Init the cell image with the track's artwork.
            UIImage *cellImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[track objectForKey"artwork_url"]]]];
cell.searchAlbumArtImage.image = cellImage;

            }
return cell; 

}

然后你的按钮按下处理程序变成 -

- (IBAction)cellAddSongButtonPressedUIButton *)sender {
    NSInteger index =  sender.tag;
    [self.selectedRows addIndex:index];
    [sender setBackgroundImage:checkImage forState:UIControlStateNormal];
}

创建一个 Track 类比使用 NSDictionary

更简洁

关于ios - TableView 单元格按钮更改其他单元格的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28120678/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap