我正在尝试实现一个uitableview,它的行可以左右拖动(并显示它们后面的内容)。代码运行良好,我使用以下方法实现了它:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
我的问题是,这些行还包含UIButtons,当单击它们时——应该单击,但当拖动时——应该拖动整个单元格。我找到了这个解决方案。基本上是在点击UI按钮时弹出事件:
[super touchesBegan:touches withEvent:event];
[self.nextResponder touchesBegan:touches withEvent:event];
但是,事件touchesMoved
似乎只出现过一次。
我看到了这方面的各种问题。实例但我看不到任何解决方案或回应
如有任何帮助、建议或创造性的解决方法,我们将不胜感激
与其实现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");
}
只需检查使用标记系统触摸的是哪一个。