0

行を左右にドラッグできる(そしてその後ろに何かを表示できる)uitableviewを実装しようとしています。コードは正常に機能します。次の方法を使用して実装しました。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

私の問題は、行にUIButtonが含まれていることです。これは、クリックするとクリックする必要がありますが、ドラッグするとセル全体をドラッグする必要があります。私はこの解決策を見つけました。基本的に、UIButtonをクリックしたときにイベントをバブルアップするには:

[super touchesBegan:touches withEvent:event];
[self.nextResponder touchesBegan:touches withEvent:event]; 

しかし、イベントtouchesMovedは一度だけ泡立つようです。
私はこの分野であらゆる種類の質問を見てきました。。しかし、解決策や回答は見当たりません。

ヘルプ、提案、または創造的な回避策をいただければ幸いです。

4

2 に答える 2

0

タグシステムを使用して、どちらがタッチされたかを確認してください。

于 2012-09-09T22:04:10.607 に答える
0

touchesBeganなどを実装する代わりに、UIPanGestureRecognizerを使用してみませんか?私はこれを、ほとんどUIButtonで覆われた単純な長方形のビューでテストしました。どこに触れてもビューがドラッグされ、ボタンをクリックするとボタンメソッドが起動しました。

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    [self.theView addGestureRecognizer:panGesture]; //theView is IBOutlet for small view containing a button
}

-(void)viewDidAppear:(BOOL)animated {
    self.currentViewFrame = self.theView.frame;
}

- (IBAction)handlePanGesture:(UIPanGestureRecognizer *)sender {
    CGPoint translate = [sender translationInView:self.view];

    CGRect newFrame = self.currentViewFrame;
    newFrame.origin.x += translate.x;
    newFrame.origin.y += translate.y;
    sender.view.frame = newFrame;

    if (sender.state == UIGestureRecognizerStateEnded)
        self.currentViewFrame = newFrame;
}

-(IBAction)doClick:(id)sender {
    NSLog(@"click");
}
于 2012-09-09T23:00:30.920 に答える