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