在UITableViewCell中正确隐藏UIButton

时间:2014-08-17 17:39:42

标签: ios objective-c uitableview uibutton

我有UIButton我希望仅在UITableViewCell的某些情况下出现。根据用户输入的信息,该按钮将可供他们使用。但是,当我删除具有可见按钮的单元格时,显示指令的默认单元格仍保留不需要的可见按钮。

以下是CellForRowAtIndexPath:

的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"a" forIndexPath:indexPath];
    UIButton *subtractPill = [UIButton buttonWithType:UIButtonTypeSystem];
    [subtractPill setTitle:@"I took a pill." forState:UIControlStateNormal];
    [cell addSubview:subtractPill];
    [subtractPill addTarget:self
                     action:@selector(subtractPill:)
           forControlEvents:UIControlEventTouchUpInside];

    if (self.delegate.medicineList.count==0){
        subtractPill.hidden=YES; //This code does not hide button.
        self.defaultText = @"Tap \"+\" button to add medicine.";
        cell.textLabel.text = self.defaultText;
        cell.detailTextLabel.text = @" ";
        return cell;
    }
    else{
        subtractPill.frame = CGRectMake(175.0f, 5.0f, 100.0f, 30.0f);
        cell.detailTextLabel.text = [NSString stringWithFormat:@"%i pills remaining.", temp.CurrentNumOfPieces];
    }
    return cell;
}

这是我的Subtract Pill按钮的代码:

- (void)subtractPill:(id)sender
{
    NSIndexPath *indexPath =
    [self.tableView indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
    NSUInteger row = indexPath.row;
    Medicine *x = [self.delegate.medicineList objectAtIndex:row];
    [x decreaseBy:1];
    [self.tableView reloadData];
}

这是我在tableview中编辑和删除单元格的代码。

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    if (self.delegate.medicineList.count==0) {
        return NO;
    }
    return YES;
}




- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
        [self.delegate.medicineList removeObjectAtIndex:indexPath.row];
    [self.tableView reloadData];

}

截至目前,默认单元格显示“点击+按钮添加药物”。删除该单元格时重叠SubtractPill按钮。换句话说,当删除包含按钮的单元格时,该按钮不会变得不可见。 我也尝试更改按钮的框架,使其在屏幕上不可见,但这也不起作用。我在研究了类似的问题后来到这里,并得出结论,按钮的隐藏属性有一个我不知道的故障或特征。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

好吧,似乎我回答了我自己的问题:我只是把隐藏的财产放在错误的地方。我仍然不完全理解为什么它不起作用,但是当我将隐藏属性放在tableview的编辑和删除方法中时,按钮不再出现。