【发布时间】:2015-06-13 00:07:15
【问题描述】:
我知道这个问题与其他问题非常相似,但我没有使用这种方法解决问题。我遵循大多数可用的解决方案,但它对我不起作用.. 我知道当 tableview 滚动它重用单元格时,但我不知道维护按钮状态的方法。我会尝试以下链接
我做了所有的事情。使用标签,使用接触点,但似乎没有什么对我有用。所以请帮帮我..这是我的示例代码
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
cell = (subcategoryCell *)[tableView dequeueReusableCellWithIdentifier:NSStringFromClass([subcategoryCell class]) forIndexPath:indexPath];
/*
* Set button for cell to subscribe with it
*/
cell.btnsubscribe = (UIButton *)[cell.contentView viewWithTag:303];
cell.btnsubscribe.tag = indexPath.row ;
[cell.btnsubscribe addTarget:self action:@selector(clickBtnSubscribe:) forControlEvents:UIControlEventTouchUpInside];
if (![_arraybtnState containsObject:listid] )
{
[cell.btnsubscribe setImage:[UIImage imageNamed:@"follow"] forState:UIControlStateNormal];
[cell.btnsubscribe setSelected:YES];
}
else {
[cell.btnsubscribe setImage:[UIImage imageNamed:@"following"] forState:UIControlStateNormal];
[cell.btnsubscribe setSelected:NO];
}
return cell;
}
_arrbtnstate 包含用户关注的 id。
并且 listid 包含唯一 id 也来自数据库
还有点击事件方法...
- (IBAction)clickBtnSubscribe:(id)sender {
UIButton *button = (UIButton*)sender;
NSLog(@"selected button tag %li", (long)button.tag);
NSNumber *tagnum = [NSNumber numberWithLong:(long)button.tag];
if (button.selected) {
[self.arraybtnState addObject:tagnum];
[button setImage:[UIImage imageNamed:@"following"] forState:UIControlStateNormal];
NSLog(@"Subscribe");
[self subscribeButton:button.tag];
[button setSelected:NO];
}
else
{
[self.arraybtnState removeObject:tagnum];
[button setImage:[UIImage imageNamed:@"follow"] forState:UIControlStateNormal];
NSLog(@"unsubscribe");
[self unsubscribeButton:button.tag];
[button setSelected:YES];
}
}
注意:在此代码中,按钮是在情节提要中创建的。但我也会尝试不使用情节提要。
【问题讨论】:
-
这不起作用,因为您总是对所有单元格使用相同的按钮。您必须为单元格创建一个新按钮。
-
请参阅我对 swift 2.1 的回答。效果很好。 stackoverflow.com/questions/25257378/…
标签: ios objective-c iphone uitableview