Ios 多次调用UITableViewCell中的禁用/启用UIButton
这是一个相当简单的情况: 我有一个自定义的UITableViewCell类,它有自己的属性、插座等。其中有两个ui按钮-->喜欢和不喜欢。您可以将它们视为喜欢或不喜欢的注释按钮 我像这样向它们添加了iActions(在TableViewController中,而不是在CustomCell类中): 在CellForRowAtIndexPath中,我检查是否选择了当前项目的用户默认值,如果选择了,我将禁用按钮(您可以喜欢或不喜欢,而不是两者都喜欢,因此需要禁用所有按钮): 在这里,调用适当的单元格indexath,获取的行的item和item的ID是正确的 问题是,除了当前选中的按钮之外,随机按钮(在一些重复使用的单元格中)也会被选中(禁用)。如果我试图通过插座禁用它们,同样的情况也会发生。当然,这是不可接受的。我尝试了各种各样的组合,但显然我的想法走错了方向Ios 多次调用UITableViewCell中的禁用/启用UIButton,ios,uitableview,uibutton,Ios,Uitableview,Uibutton,这是一个相当简单的情况: 我有一个自定义的UITableViewCell类,它有自己的属性、插座等。其中有两个ui按钮-->喜欢和不喜欢。您可以将它们视为喜欢或不喜欢的注释按钮 我像这样向它们添加了iActions(在TableViewController中,而不是在CustomCell类中): 在CellForRowAtIndexPath中,我检查是否选择了当前项目的用户默认值,如果选择了,我将禁用按钮(您可以喜欢或不喜欢,而不是两者都喜欢,因此需要禁用所有按钮): 在这里,调用适当的单元格i
有什么建议或链接吗?或者如何将这些按钮与操作和位置正确连接。这是因为表格单元格被重用。查看
UITableView
的文档了解更多信息。要解决此问题,请维护表中某个索引的按钮是否需要在其他位置启用或禁用的信息,然后在tableView:cellforrowatinexpath:
中启用/禁用它们。我刚刚遇到同样的问题,并找到了一个简单的解决方法。所选答案不正确。您已经在维护表的某个索引的按钮是否需要在其他地方通过使用该ID的NSDefault来启用或禁用的信息
解决这一问题的方法是
cellForRowAtIndexPath:
就在你的
if((/* get NSUserDefault for the ID*/) == YES){
[cell.likeButton setEnabled:NO];
[cell.dislikeButton setEnabled:NO];
}
始终启用按钮。将此代码放在else语句中也有效
注意:这是可行的,但不是最好的解决方案。这是解决此问题的另一个完美解决方案…… 在tableView的CellForRowAtIndexpath方法中,首先设置按钮的标记
cell.Yourbutton.tag = [Indexpath row];
- (void)likeEvent:(UIButton *)sender
{
UIButton *likeButton = (UIButton *)sender;
if (likeButton.isSelected) {
[likeButton setImage:[UIImage imageNamed:@"like-default.png"] forState:UIControlStateNormal];
}else {
[likeButton setImage:[UIImage imageNamed:@"like-active.png"] forState:UIControlStateSelected];
}
[likeButton setSelected:!likeButton.isSelected];
NSLog(@"like:%d",likeButton.isSelected);
}
//调用UIButton事件
[cell.youbutton addTarget:self action:@selector(likeEvent:) forControlEvents:UIControlEventTouchUpInside];
//方法声明
cell.Yourbutton.tag = [Indexpath row];
- (void)likeEvent:(UIButton *)sender
{
UIButton *likeButton = (UIButton *)sender;
if (likeButton.isSelected) {
[likeButton setImage:[UIImage imageNamed:@"like-default.png"] forState:UIControlStateNormal];
}else {
[likeButton setImage:[UIImage imageNamed:@"like-active.png"] forState:UIControlStateSelected];
}
[likeButton setSelected:!likeButton.isSelected];
NSLog(@"like:%d",likeButton.isSelected);
}
我知道这些单元是重复使用的,这就是这个问题的原因。我不会基于
indexPath.row
值禁用按钮,而是将项的ID保存为用户默认值。在tableView:cellforrowatinexpath:
中,我首先检查用户默认值,如果有id,则禁用按钮。但是,它仍然会禁用多个单元格。谢谢@Sam的回答。我已经通过使用标签解决了这个问题。答案现在已编辑。如果您已找到此问题的答案,请将其添加为此问题的答案(且仅为答案)。无需编辑问题以包含答案。