gpt4 book ai didi

iOS 自定义单元格 - 重用标识符

转载 作者:行者123 更新时间:2023-11-28 21:46:28 26 4
gpt4 key购买 nike

我正在尝试创建一个带有收藏按钮的自定义单元格。它工作正常,但我认为重用标识符在这里造成了问题。我已经尝试过两种方式,并且两种方式都运行良好。

这是我的第一次尝试:当我选择按钮时,它会变成黄色按钮,反之亦然。但在向上或向下滚动后,它再次变为正常状态。为什么?

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CI=@"CELL";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CI];
if(!cell) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CI];
}
favbtn=[[UIButton alloc]initWithFrame:CGRectMake(160, 10, 30, 35)];

[cell.contentView addSubview:favbtn];
[favbtn setBackgroundImage:[UIImage imageNamed:@"starr.png"] forState:UIControlStateNormal];
[favbtn addTarget:self action:@selector(fav:) forControlEvents:UIControlEventTouchUpInside];
cell.textLabel.text=[favdata objectAtIndex:indexPath.row];
return cell;

}

-(void)fav:(id)sender
{
if ([sender isSelected]) {
[sender setImage:[UIImage imageNamed:@"starr.png"] forState:UIControlStateNormal];
[sender setSelected:NO];
} else {
[sender setImage:[UIImage imageNamed:@"star.png"] forState:UIControlStateSelected];
[sender setSelected:YES];
}
}

这是我的第二次尝试:

这里每六个单元格都显示相同的状态。

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CI=@"CELL";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CI];
if(!cell) {

cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CI];

favbtn=[[UIButton alloc]initWithFrame:CGRectMake(160, 10, 30, 35)];

[cell.contentView addSubview:favbtn];
[favbtn setBackgroundImage:[UIImage imageNamed:@"starr.png"] forState:UIControlStateNormal];
[favbtn addTarget:self action:@selector(fav:) forControlEvents:UIControlEventTouchUpInside];
cell.textLabel.text=[favdata objectAtIndex:indexPath.row];
}

return cell;
}

最佳答案

首先修改这个方法:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CI=@"CELL";
UIButton * favbtn;
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CI];
if(!cell)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CI];
favbtn=[[UIButton alloc]initWithFrame:CGRectMake(160, 10, 30, 35)];
[cell.contentView addSubview:favbtn];
[favbtn setTag:11221133];
}

favbtn = [cell.contentView viewWithTag:11221133];
[favbtn setBackgroundImage:[UIImage imageNamed:@"starr.png"] forState:UIControlStateNormal];
[favbtn setImage:[UIImage imageNamed:@"starr.png"] forState:UIControlStateNormal];
[favbtn setImage:[UIImage imageNamed:@"star.png"] forState: UIControlStateSelected];

//Check selections here and if this index is selected make btn selected.

[favbtn addTarget:self action:@selector(fav:) forControlEvents:UIControlEventTouchUpInside];
cell.textLabel.text=[favdata objectAtIndex:indexPath.row];
cell.contentView.tag = indexPath.row;
return cell;

}

-(void)fav:(id)sender
{
UIButton * btn = (UIButton *)sender;
btn.selected = !btn.selected;
int index = [[btn superview] tag]; // use this index for storing selections
}

然后创建一个数组来存储选择。在 cellForRowAtIndexPath 中比较此选择,并选择或不选择 btn。

希望这对你有帮助......

关于iOS 自定义单元格 - 重用标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29985813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com