1

我想模拟 a 上选定UITableViewCell(蓝色)的行为UIView,有没有办法做到这一点,即当用户点击 时UIView,就像点击 tableview 单元格一样。该视图将使用相同的蓝色突出显示。

4

1 回答 1

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 中的文本如何变为白色。

于 2012-04-16T04:35:47.020 回答