1

UITableViewCellで選択した(青で)の動作をシミュレートしたいのですUIViewが、それを行う方法はありますか。つまり、ユーザーが をタップするUIViewと、テーブルビューセルをタップするようになります。ビューは同じ青色で強調表示されます。

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 に答える