我想要什么
有一个tableview。我只想通过在TableViewCell中点击它来隐藏UIButtonTypeContactAdd附件。
我的问题
当我点击附件按钮A(我只在整个程序中轻敲)时,它正确隐藏。但是当我向下滚动桌面时,我发现另一个附件按钮B被隐藏得很可笑。将快速滚动到tableview的顶部后,按钮B guy又在那里,同时另一个按钮C隐藏了......
遗憾的是我无法在我的帖子中放置图片。希望你能理解发生了什么。
代码
的tableView:的cellForRowAtIndexPath:
static NSString *CellIdentifier = @"All Name Showing Table";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if(!cell.accessoryView){
UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = button;
}
- (IBAction)buttonTapped:(UIButton *)sender
{
UITableViewCell *tvc = (UITableViewCell *)[sender superview];
NSString *peopleTapped = [NSString stringWithFormat:@"you have favored %@",tvc.textLabel.text];
NSLog(@"%@",peopleTapped);
sender.hidden = YES;
}
所有这一切都是因为细胞再利用的机制吗?
抱歉我的英语不好 谢谢!
答案 0 :(得分:1)
你不能这样使用表格。您应该有一个带有对象的数据模型,该对象存储按钮附件按钮状态。
static NSString *CellIdentifier = @"All Name Showing Table";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if(!cell.accessoryView){
UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = button;
}
Model *model = [_array objectAtIndex:indexPath.row];
button.tag = [_array indexOfObject:indexPath.row];
button.hidden = model.hidden;
....
}
- (IBAction)buttonTapped:(UIButton *)sender
{
Model *model = [_array objectAtIndex:sender.tag];
model.hidden = YES;
[table reloadData];
}
像这样。
答案 1 :(得分:0)
是的,它正在发生,因为细胞重用。您需要能够跟踪tableview中的每个按钮,可能是通过将其与数据源对齐。这可以通过让您的单元数据源跟踪每个按钮的状态来轻松完成。