我在内容视图中有一个带有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];
}
}];
}
答案 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
级别动态创建菜单,并在它出现之前将其放在单元格下面。