iOS 7 UITableViewCell按钮出现在长按

时间:2014-01-13 08:53:11

标签: ios uitableview

我在内容视图中有一个带有3个按钮的UITableViewCell。当我向左滑动时,将显示3个按钮。

但是当我长按细胞时,我发现它变得透明,3个按钮显示在背景中。这是一个问题吗?

我可以修改代码,以便在长按单元格时使按钮不可见吗?

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self.contentView addSubview:self.thumbnailButton];
        [self.contentView addSubview:self.renameButton];
        [self.contentView addSubview:self.deleteButton];
        [self.contentView addSubview:self.containerView];
        [self.containerView addSubview:self.seperator];
        [self.containerView addSubview:self.thumbnailImageView];
        [self.containerView addSubview:self.nameLabel];
        [self.containerView addSubview:self.ipLabel];
    }
    return self;
}

- (void)swipe:(UISwipeGestureRecognizer *)recognizer
{
    BOOL canShow = [self.delegate cellMenuWillShow:self];

    if (recognizer.direction == UISwipeGestureRecognizerDirectionRight)
    {
        if (!canShow) {
            [self hideMenu];
        }

        return;
    }

    if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
        if (!canShow) {
            return;
        }
    }

    [UIView animateWithDuration:.3 animations:^{
        CGRect frame = self.containerView.frame;
        frame.origin.x -= 250;
        self.containerView.frame = frame;
    } completion:^(BOOL finished) {
        self.menuShowed = YES;
        if ([self.delegate respondsToSelector:@selector(cellMenuDidShowed:)]) {
            [self.delegate cellMenuDidShowed:self];
        }
    }];
}

1 个答案:

答案 0 :(得分:2)

您看到的长按行为是UITableViewCell突出显示。 -setHighlighted:animated:-setSelected:animated:的默认实现会删除所有未选择/突出显示状态的视图的背景。

在您的情况下,您可以将单元格selectionStyle设置为UITableViewCellSelectionStyleNone

或者,您可以覆盖这两种方法,也可以不调用super实现,或者在super设置所需的背景颜色后立即调用:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    [super setHighlighted:highlighted animated:animated];
    self.contentView.backgroundColor = [UIColor redColor];
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];
    self.contentView.backgroundColor = [UIColor blueColor];
}   

更新

一些评论WRT你的代码: 最好不要处理单元格内的手势识别器。您可以在UITableView中使用一个,这样就可以实现类似iOS7的行为。例如。当您滑动另一个单元格时 - 先前选择的菜单关闭。 如果你的桌子有很多相同的单元格,你不需要在每个单元格中都有菜单按钮, - 在UITableView级别动态创建菜单,并在它出现之前将其放在单元格下面。