滑动删除时隐藏TableViewCell中的标签

jcr*_*son 3 objective-c uitableview ios

我希望能够隐藏我的标签,UITableViewCell以便在用户滑动删除单元格时阻止它与标题重叠.

我正在使用以下代码来启动和处理要删除的滑动:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        [self.tableView beginUpdates]; // Avoid  NSInternalInconsistencyException

        // Delete the project object that was swiped
        Project *projectToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
        NSLog(@"Deleting (%@)", projectToDelete.name);
        [self.managedObjectContext deleteObject:projectToDelete];
        [self.managedObjectContext save:nil];

        // Delete the (now empty) row on the table
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
        [self performFetch];

        [self.tableView endUpdates];
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用以下方法在单元格中分配了标签:

UILabel *projectDate = (UILabel *)[cell viewWithTag:3];
    projectDate.text = project.dateStarted;
Run Code Online (Sandbox Code Playgroud)

并尝试过设置

projectDate.hidden = YES; 
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.

Aar*_*man 6

我认为你需要子类UITableViewCell来实现它.在子类覆盖中- (void) setEditing:(BOOL)editing animated:(BOOL)animated.在此方法中,您可以隐藏标签.如果您只需要隐藏删除操作的标签,则self.editingStyle根据编辑样式使用有条件地隐藏标签(aka:UITableViewCellEditingStyleDelete).

这是两个例子.我更喜欢第二个例子,它更容易.但是示例之一将允许您替换可能有用的文本:

@implementation CellSubclass{
    NSString *_labelText; //only used in example 1
}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}
// Example 1, replacing the text value
- (void) setEditing:(BOOL)editing animated:(BOOL)animated{
    [super setEditing:editing animated:animated];
    if (editing && self.editingStyle == UITableViewCellEditingStyleDelete){
        UILabel *label = (UILabel *)[self viewWithTag:3];
        _labelText = label.text;
        self.textLabel.text = nil;
    }  else if (!editing && _labelText){
        UILabel *label = (UILabel *)[self viewWithTag:3];
        label.text = _labelText;
    }
}

//Example 2 - hiding the view itself
- (void) setEditing:(BOOL)editing animated:(BOOL)animated{
    [super setEditing:editing animated:animated];
    if (editing && self.editingStyle == UITableViewCellEditingStyleDelete){
        [self viewWithTag:3].alpha = 0.0f;
    } else {
        [self viewWithTag:3].alpha = 1.0f;
    }
}

@end
Run Code Online (Sandbox Code Playgroud)

请注意,我有两个同名的方法.这显然是一个很大的禁忌......只使用其中一个.

另请注意,我忽略了动画参数.如果你希望在第二个例子(也就是......淡出/淡入)中对你的标签的消失进行动画处理,你需要做的就是在动画块中包围你的变化,如下所示:

        [UIView animateWithDuration:.3f animations:^{
            [self viewWithTag:3].alpha = 0.0f;
        }]; 
Run Code Online (Sandbox Code Playgroud)

我认为你不能动画第一个例子.