可以以某种方式索引表视图行中的按钮吗?

时间:2012-01-15 15:12:49

标签: xcode button tableview

我有一个包含3个项目的表格视图,其中一个我有一个按钮。选择按钮后,我想隐藏该按钮,显示其后面的项目。我正在使用表格视图单元格显示表格行。当我选择隐藏的一个按钮时,滚动表格会隐藏更多按钮。隐藏按钮似乎隐藏了基于当前视图的可视行中的某个位置的按钮。我试图隐藏特定行上的按钮。

每当我点击代码隐藏按钮时,我都可以写入NSLog,但我只会到达那里,但是当我滚动表格时,按钮的隐藏属性会应用于其他进入视图的行。如果我选择第53行上的按钮,我只想隐藏第53行中的按钮,而不是120行表中其他行上的按钮。

有没有人做过我想做的事情?任何帮助我可以弄清楚发生了什么将不胜感激。感谢。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *ElementCellIdentifier = @"ElementCellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ElementCellIdentifier];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ElementRowCell"
                                                 owner:self options:nil];
        if ([nib count] > 0) {
            cell = self.tvCell;
        } else {
            NSLog(@"failed to load ElementRowCell nib file!");
        }
    }

    NSUInteger row = [indexPath row];

    UILabel *atomic_number = (UILabel *)[cell.contentView viewWithTag:1];                               
    atomic_number.text = [NSString stringWithFormat:@"%d",elements_table[row].atomic_number];

    UILabel *element_name = (UILabel *)[cell.contentView viewWithTag:2];
    element_name.text = [NSString stringWithCString:elements_table[row].element_name];

    UILabel *element_symbol = (UILabel *)[cell.contentView viewWithTag:3];
    element_symbol.text = [NSString stringWithCString:elements_table[row].element_symbol];

    return cell;
}

- (IBAction)buttonPressed:(id)sender {

NSLog(@"Getting to buttonPressed from row button");
UIButton *pressedButton = (UIButton *)sender;
NSIndexPath *indexPath = [self.mainTableView indexPathForCell:     (UITableViewCell *)[sender superview]];
pressedButton.hidden = TRUE;

}

1 个答案:

答案 0 :(得分:0)

对不起。 基本上发生的事情是你正在隐藏特定表格视图单元格中的按钮实例。问题是当它为另一行出列时,没有什么能恢复它的状态。如果您只是将其状态恢复为可见状态,那么您单击的行将被遗忘。您需要保存已经单击的行才能在tableView:cellForRowAtIndexPath:中正确恢复状态。

我将如何处理此问题是声明NSMutableSet *selectedIndexPaths;。并使用它来存储我选择的行。然后,当单击该按钮时,将indexPath添加到该集合中。

- (IBAction)buttonPressed:(UIButton *)button{
    if (![button isKindOfClass:[UIButton class]]) return;
    UIView *finder = button.superview;
    while ((![finder isKindOfClass:[UITableViewCell class]]) && finder != nil) {
        finder = finder.superview;
    }
    if (finder == nil) return;
    UITableViewCell *myCell = (UITableViewCell *)finder;
    NSIndexPath *indexPath = [self.mainTableView indexPathForCell:myCell];
    [selectedIndexPaths addObject:indexPath];
    button.hidden = TRUE;
    NSLog(@"IndexPathRow %d",indexPath.row);
}

现在在tableView:cellForRowAtIndexPath:中滚动时正确恢复状态使用if语句来设置按钮的隐藏属性,如下所示:

buttonPropertyName.hidden = ([selectedIndexPaths containsObject:indexPath]);