UiButton文本不会在Tableview单元格中保持更改

时间:2014-08-08 18:57:57

标签: ios uitableview ios7 uibutton

我在网上搜索过,似乎找不到解决这个简单问题的方法。当工作“喜欢”时,我有按钮的表格视图。按下按钮时,它会将单词更改为“不同”。我得到它的工作,但当我向下滚动表时,我看到其他的buttosn也变为“不同”,有时与“喜欢”重叠。当我向上滚动时,我选择的原始按钮会变回正常状态。我知道单元格是可重用的,这就是为什么我使用可变数组作为我的数据源,但它仍然无法工作。请帮忙!

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [myButton setTitle:@"Like" forState:UIControlStateNormal];
    myButton addTarget:self action:@selector(tapped:) forControlEvents:UIControlEventTouchUpInside];
    myButton.frame = CGRectMake(14.0, 10.0, 125.0, 25.0);
    myButton.tag =indexPath.row;
    [cell.contentView addSubview:myButton];
    cell.textLabel.text = [recipes objectAtIndex:indexPath.row];  
 return cell;
}

动作方法:

-(void)tapped:(id)sender {
    UIButton *senderButton = (UIButton *)sender;

    UITableViewCell *parentCell = [[sender superview]superview];

    NSIndexPath *indexPathLiked = [table indexPathForCell:parentCell];

    [array replaceObjectAtIndex:senderButton.tag withObject:[NSNumber numberWithInt:1]];

    [sender setTitle:@"Unlike" forState:UIControlStateNormal];

}

1 个答案:

答案 0 :(得分:0)

如果表调用了cellForRowAtIndexPath,则会一直创建一个新按钮。当你得到一个重复使用的单元格时,按钮仍然存在,你在那里放了一个新的按钮。

将您的方法更改为:

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [myButton setTitle:@"Like" forState:UIControlStateNormal];
    myButton addTarget:self action:@selector(tapped:) forControlEvents:UIControlEventTouchUpInside];
    myButton.frame = CGRectMake(14.0, 10.0, 125.0, 25.0);
    myButton.tag =indexPath.row;
    [cell.contentView addSubview:myButton];
}
else {
   // todo: change the button title to "like" or "unliked" value
}
cell.textLabel.text = [recipes objectAtIndex:indexPath.row];  

P.S。这没有意义,你没有使用它,为什么你这样做?

UITableViewCell *parentCell = [[sender superview]superview];
NSIndexPath *indexPathLiked = [table indexPathForCell:parentCell];

如果您只有一个部分,则可以在不使用superview的情况下获取单元格:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag inSection:0]
UITableViewCell *parentCell = [table cellForRowAtIndexPath:indexPath];