点击UITableViewCell时UIView消失

时间:2017-01-03 14:10:19

标签: ios uitableview uiview

在我的iOS应用程序中,我目前正在努力解决我在故事板中设计的自定义UITableViewCell的问题。

当我点击使用此特定UITableViewCell呈现的表格视图行时,会出现此问题。

这是使用此UITableViewCell呈现的行的默认外观:

default look of a row rendered with UITableViewCell

这是我点击它后的显示方式:

how it appears after I tap

正如您所看到的那样,绿线已经消失,并且在敲击行之前一直不可见。一旦该行被释放,它就会回到默认状态,一切都很好。

这是我期待看到的:

expected result

这是故事板中显示的UITableViewCell结构。 RouteView是绿线UIView项目:

UITableViewCell structure as shown into the storyboard

我还为UIView对象添加了storyboard的属性部分:

attributes section of the storyboard for the UIView

我有一个附加到UITableViewCell的类,它通过IBOutlets处理对象的布局,而行上的点击则在UITableView级别处理。

我根据某些条件更改了UIView的背景颜色,但它可以是绿色,红色和蓝色,从不透明。它与this有关吗?

我该如何解决这个问题? 提前谢谢。

3 个答案:

答案 0 :(得分:3)

我设法找到this answer中描述的解决方案,但在我的情况下是obj-c。

显然,当UITableViewCell被选中或突出显示时,会自动删除所有封闭背景颜色的视图(我认为它是[UIColor clearColor])。

我正在做的是在执行对setSelected或setHighlighted的超级方法调用之前获取我的视图的颜色,然后立即将颜色设置为背景。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

    // Gets route view background color before doing setSelected animation
    UIColor *routeViewBkgColor = self.routeView.backgroundColor;
    [super setSelected:selected animated:animated];

    // Set route view background color after setSelected animation
    self.routeView.backgroundColor = routeViewBkgColor;
}

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {

    // Gets route view background color before doing setSelected animation
    UIColor *routeViewBkgColor = self.routeView.backgroundColor;
    [super setHighlighted:highlighted animated:animated];

    // Set route view background color after setSelected animation
    self.routeView.backgroundColor = routeViewBkgColor;
}

通过这种方式,我100%能够在不丢失所有视图的背景颜色的情况下获得保持选择行为的预期效果。

答案 1 :(得分:0)

您可能需要将单元格的选择样式设置为none。您可以按照Nirav D提到的方式或通过故事板(参见图像)以编程方式执行此操作。

enter image description here

答案 2 :(得分:0)

目前的答案都是正确的,但是如果您使用的是Objective-C而不是swift。

您必须使用cell.selectionStyle = UITableViewCellSelectionStyleNone;

或者,如果你想要有#34;点击"的效果,那么你必须使用

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

[tableView deselectRowAtIndexPath:indexPath animated:YES];

}

希望它有所帮助! : - )