拖动包含uibuttons的tableview单元格

时间:2012-09-09 21:49:28

标签: objective-c uitableview uibutton touchesmoved

我正在尝试实现一个uitableview,它的行可以向右和向左拖动(并在它们后面显示一些东西)。 代码工作正常,我使用以下方法实现它:

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

我的问题是这些行还包含UIButtons,点击它们时应该点击但是在拖动时应该拖动整个单元格。 我找到了 this 解决方案。基本上是在点击UIButtons时冒泡事件:

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

但是,似乎事件touchesMoved只有泡一次。 我在这方面看到了各种各样的问题。 Example。但我没有看到任何解决方案或回应。

任何帮助,建议或创意解决方法都将不胜感激!

2 个答案:

答案 0 :(得分:0)

只需使用标签系统检查是否触摸了哪一个。

答案 1 :(得分:0)

为什么不使用UIPanGestureRecognizer而不是实现touchesBegan等?我用一个简单的矩形视图对其进行了测试,该视图主要由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");
}