当我们在iOS中点击自定义UITableViewCell时会发生什么?

时间:2015-09-15 19:20:15

标签: ios objective-c uitableview drawrect custom-cell

我的视图控制器中有UITableView,我有一个自定义UITableViewCell类,用于执行绘图,绘图文本,线条等。

所有这些都发生在drawRect:方法中。除此之外,我已经看到了一些与drawRect:

一起使用的方法

他们是..

-(void)setNeedsDisplay
-(void)setSelected:(BOOL)selected animated:(BOOL)animated
-(void)setEditing:(BOOL)editing animated:(BOOL)animated
-(void)layoutSubviews

我的问题是,我们是如何/何时使用这些方法的?

PS:我的实际问题是,当我点击这个自定义单元格时,我使用drawRect绘制的图像和文本被选择背景隐藏了。这是因为系统会使用选择背景覆盖UITableViewCell的所有子视图。但是,我想在点击时仅改变单元格的背景颜色。

只是困惑!!

2 个答案:

答案 0 :(得分:0)

您可能不希望在-drawRect:中执行所有图像,文本和线条绘制(除非您真的是这个意思!)。相反,您应该将子视图添加到-layoutSubviews

现在,如果你所做的只是自定义自定义表格单元格的视图层次结构,请确保将所有子视图添加到单元格contentView。有很多例子可以解释如何做到这一点。当你点击单元格时,处理图层排序,iOS会添加选择视图。

至于您的其他问题,您可能希望阅读UIView生命周期中的文档:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/

答案 1 :(得分:0)

将您的子视图添加到单元格cell.selectionStyle = UITableViewCellSelectionStyleNone而不是单元格本身。

此外,您可能希望drawRect:避免iOS进行任何突出显示。

如果您正在继承UITableViewCell并覆盖其contentView,那么这将无法正常工作。而是将子视图添加到drawRect,并在该子项中实现-(void)method:(UIView *)_view { UIButton*Touch1= [UIButton buttonWithType:UIButtonTypeRoundedRect]; [Touch1 addTarget:self action:@selector(TouchButton1:) forControlEvents:UIControlEventTouchUpInside]; [Touch1 setFrame:CGRectMake(50,50, 100, 100)]; Touch1.translatesAutoresizingMaskIntoConstraints = YES; [Touch1 setBackgroundImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal]; [Touch1 setExclusiveTouch:YES]; [_view addSubview:Touch1]; NSLog(@"hi "); }