我想模拟UITableViewCell
上所选UIView
(蓝色)的行为,有没有办法做到这一点,即,当用户点击UIView
时,它就是比如点击一个tableview单元格。视图将使用相同的蓝色突出显示。
答案 0 :(得分:4)
首先,了解UITableView单元的行为方式非常有用:
UIControlEventTouchUpInisde
控件事件那我们怎样才能模拟这个呢?我们可以从继承UIControl
(它本身是UIView的子类)开始。我们需要子类化UIControl,因为我们的代码需要响应UIControl方法sendActionsForControlEvents:
。这样我们就可以在自定义类上调用addTarget:action:forControlEvents
。
TouchHighlightView.h:
@interface TouchHighlightView : UIControl
@end
TouchHighlightView.m:
@implementation TouchHighlightView
- (void)highlight
{
self.backgroundColor = [UIColor blueColor];
}
- (void)unhighlight
{
self.backgroundColor = [UIColor whiteColor];
}
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
[self highlight];
}
- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
[self unhighlight];
}
- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
// assume if background color is blue that the cell is still selected
// and the control event should be fired
if (self.backgroundColor == [UIColor blueColor]) {
// send touch up inside event
[self sendActionsForControlEvents:UIControlEventTouchUpInside];
// optional: unlighlight the view after sending control event
[self unhighlight];
}
}
示例用法:
TouchHighlightView *myView = [[TouchHighlightView alloc] initWithFrame:CGRectMake(20,20,200,100)];
// set up your view here, add subviews, etc
[myView addTarget:self action:@selector(doSomething) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:myView];
这只是一个艰难的开始。您可以根据需要随意修改。可以进行若干改进以使用户根据其用途更好。例如,当UITableCell处于选定(蓝色)状态时,请注意textLabels中的文本如何变为白色。